日志配置检查与优化说明.md 5.3 KB

日志配置(logback-spring.xml)检查与优化说明

一、本次已修复的问题

1. Logger 名称尾随空格导致降噪失效(风险)

  • 问题DefaultSecurityFilterChainURLConfigurationSource 等 logger 名称带尾部空格,与真实类名不一致,降噪配置无法匹配,框架 DEBUG 日志仍会输出。
  • 处理:已去掉上述 logger 名称中的尾部空格,所有模块已统一修正。

2. 归档总大小无上限(风险)

  • 问题:仅配置 maxHistory=30maxFileSize=1MB,单级别理论最大约 30MB,但多服务、多级别同目录时,总磁盘占用不可控,存在写满磁盘风险。
  • 处理:已为所有文件的 SizeAndTimeBasedRollingPolicy 增加 <totalSizeCap>500MB</totalSizeCap>。即每个服务、每个级别(DEBUG/INFO/WARN/ERROR)的归档总大小上限 500MB,单服务四类合计约 2GB 上限。

3. alien-dining 注释不统一

  • 问题log.maxHistory 注释为「30个」,与其他模块「保留30个归档」不一致。
  • 处理:已统一为「30表示保留30个归档」。

二、已识别的风险与建议

1. logging.path 默认值为 Windows 路径

  • 风险defaultValue="C:/project/ext/log" 在 Linux 或容器中若未设置 logging.path,目录可能不存在或不可写,导致日志写失败或落盘到非预期路径。
  • 建议
    • 生产/测试环境在 application.yml 或环境变量中显式配置 logging.path(如 /var/log/alien-xxx./logs)。
    • 已在 alien-gateway 的 logback 中增加注释提醒,其他模块部署时同样需保证该配置正确。

2. alien-dining 控制台为 DEBUG 级别(已修复)

  • 原风险:alien-dining 的 CONSOLE 使用 ${log.level}(debug),控制台会输出 DEBUG,生产易刷屏。
  • 处理:已改为与其它模块一致,CONSOLE 固定为 INFO,仅文件仍按级别分 DEBUG/INFO/WARN/ERROR。

3. 多实例同目录部署

  • 现状:各服务已写入各自子目录 LOG_DIR(如 logging.path/alien-dining/),同机多实例若共用同一 logging.path 且相同 FILENAME 会写同一子目录。
  • 建议:同一台机多实例时,为每个实例配置不同的 logging.path(如 .../log-instance1)或通过启动参数覆盖 FILENAME 以区分。

4. logging.path 根目录需存在

  • 说明:Logback 只会自动创建当前写入文件的父目录(即 LOG_DIR = logging.path/FILENAME),不会自动创建 logging.path 本身。
  • 建议:部署前确保 logging.path 所指目录已存在且有写权限;否则首次写日志会报错。Linux 可设为 /var/log/xxx./logs 并确保目录存在。

三、可选优化(未改配置)

项目 说明
异步 Appender 对写盘量大的服务可将 FILE 包一层 AsyncAppender,减轻主线程 IO,需接受异常退出时可能少几条日志。
按环境区分 使用 <springProfile name="pro"> 等区分开发/生产路径、级别或 totalSizeCap。
immediateFlush 默认 true,设为 false 可减少 IO,换少量丢日志风险,一般保持 true。

四、当前各模块配置要点汇总

项目 说明
滚动策略 SizeAndTimeBasedRollingPolicy,单文件 1MB,按天+序号归档并压缩为 .gz
日志目录 各服务写入各自子目录 ${logging.path}/${FILENAME}/,如 C:/project/ext/log/alien-dining/alien-gateway/
当前写入文件 ${LOG_DIR}/DEBUG.logINFO.logWARN.logERROR.log(LOG_DIR = logging.path/FILENAME)
归档保留 maxHistory=30 个归档,totalSizeCap=500MB/级别
启动清理 cleanHistoryOnStart=true
文件编码 UTF-8
降噪 DefaultSecurityFilterChain、URLConfigurationSource 等已设为 WARN,且 logger 名称已去掉尾空格

五、本次排查已做的修改

  • alien-dining logback:CONSOLE 由 ${log.level} 改为固定 INFO,与其它模块一致,避免生产控制台 DEBUG 刷屏;并增加 logging.path 部署说明注释。
  • 文档:多实例说明更新为 LOG_DIR 子目录;新增「logging.path 根目录需存在」说明;alien-dining 控制台风险标记为已修复。

六、当前剩余隐患与可优化(结论)

类型 说明 建议
部署 logging.path 默认 C:/project/ext/log,Linux/容器未配置时可能写失败 生产/测试在配置或环境变量中设置 logging.path,并确保该目录存在
部署 Logback 只自动创建 LOG_DIR,不创建 logging.path 根目录 部署前创建根目录或使用已存在路径(如 ./logs
多实例 同机多实例若共用同一 logging.path 且同服务名会写同一子目录 按实例配置不同 logging.path 或区分 FILENAME
可选 高吞吐服务可考虑 AsyncAppender 减轻主线程 IO 按需在对应模块为 FILE appender 包一层异步,接受异常退出时可能少几条日志
可选 按环境区分路径/级别(如 pro 用不同 path 或 totalSizeCap) 使用 <springProfile name="pro">

当前配置已无已知逻辑错误;剩余为部署约定与可选性能优化。