日志监控与定时任务
日志回答发生了什么,监控回答当前状态,任务负责计划执行。三者不能互相替代,也不应把一次接口成功视为后台恢复已全部完成。
出现问题先去哪里看
| 现象 | 查看位置 |
|---|---|
| Java 启动失败 | IDE/命令行控制台;Docker 查看 app 日志 |
| 用户说某次操作失败 | 对应时间的操作日志,再结合应用异常 |
| 登录失败或疑似爆破 | 登录日志与安全审计,必要时检查锁定策略 |
| 定时操作没有执行 | 任务启用状态、执行计划与任务执行日志 |
| 用户会话异常 | 在线用户及会话状态 |
脚本启动的应用日志位于根目录 logs/art-design-pro-x-java.log;IDE 是否写文件由实际运行配置决定。容器日志命令见 部署运维,开发数据服务日志见 常见问题。
日志与安全事件
| 入口 | 内容 | 适用边界 |
|---|---|---|
| 应用日志 | 启动、配置检查、异常及后台执行信息 | 由部署环境收集和保留 |
| 登录日志 | 登录结果与相关身份/IP 信息 | 登录结果与审计可用性分离 |
| 操作日志 | HTTP 修改请求与业务动作 | 不是所有业务历史的无损事件总线 |
| 安全审计 | 爆破、新 IP、敏感失败、权限变更、日志清理、强制下线等规则事件 | 仅覆盖已实现的采集与检测规则 |
操作日志拦截器采集 /api/** 下的 POST/PUT/PATCH/DELETE,排除登录、注册和刷新。@Log 声明模块、动作和采集开关,缺少注解仍有路径/方法兜底。
密码字段和临时文件凭证不应写入普通日志。鉴权拒绝未进入采集链、存储故障或进程中断不具备普通 HTTP 日志无损保证。支付内部状态变化另通过事务内审计记录,详见 商城与支付。
安全事件可确认、解决或忽略,处置记录用于跟踪。登录失败阈值与时间窗由系统参数控制,默认 5 次 / 15 分钟;这与站点登录锁定是不同机制。
监控能力
服务、Redis、在线用户与访客等由 monitor 提供。缓存监控只允许清理受控业务命名空间,不提供任意 Redis 键删除入口,也不把登录态列为普通缓存清理对象。详见 业务缓存。
健康检查 UP 只是一项启动/依赖信号。生产还应观察错误率、任务失败、存储恢复积压和支付未确认状态,按实际基础设施接入告警。
系统维护任务
系统任务由 Spring 定时触发、CronScheduleService 计算计划、ScheduledTaskRegistry 按处理器编码分发。管理页面配置的是已有处理器及参数,不会执行任意 Java 类、脚本或 Shell。
新增处理器实现 tasks/spi/ScheduledTaskHandler:
TaskHandlerDefinition definition();
TaskExecutionResult execute(TaskParameters parameters);在所属业务域注册为 Spring Bean,提供唯一合法编码、参数定义和有界执行逻辑。注册表拒绝重复编码;参照 TaskLogCleanupHandler 等真实实现,不仅往前端下拉框加一个选项。
并发与失败
计划执行用 MySQL 行锁认领到期任务,FORBID 策略还使用 Redis 固定 30 分钟租约。手动/多实例任务必须有小于租期的执行上限并实现幂等,不能假设锁会无限自动续期。
失败让异常传播给执行器记录,不吞异常返回成功。外部调用设置超时,批处理限制每轮数量;长任务按实际用例拆分或设计经过验证的持久化执行控制。
商城商品排期、超时订单与支付恢复有独立调度配置,文件恢复也单独运行。关闭商城 scheduler 不会停止全部维护任务,更不代表已进入可备份的停写状态。
验证与排查
先查任务启用状态、cron、处理器编码、参数和执行日志,再查锁、Redis 与业务错误。新增任务覆盖成功、失败、重复执行与超时边界,不能只验证“日志出现一次”。
源码入口:tasks/service、tasks/spi、各业务域 task,审计位于 audit,应用调度装配在 art-admin/admin/config。
