# 日志配置(logback-spring.xml)检查与优化说明 ## 一、本次已修复的问题 ### 1. Logger 名称尾随空格导致降噪失效(风险) - **问题**:`DefaultSecurityFilterChain `、`URLConfigurationSource ` 等 logger 名称带尾部空格,与真实类名不一致,降噪配置无法匹配,框架 DEBUG 日志仍会输出。 - **处理**:已去掉上述 logger 名称中的尾部空格,所有模块已统一修正。 ### 2. 归档总大小无上限(风险) - **问题**:仅配置 `maxHistory=30` 和 `maxFileSize=1MB`,单级别理论最大约 30MB,但多服务、多级别同目录时,总磁盘占用不可控,存在写满磁盘风险。 - **处理**:已为所有文件的 `SizeAndTimeBasedRollingPolicy` 增加 **`500MB`**。即每个服务、每个级别(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,需接受异常退出时可能少几条日志。 | | **按环境区分** | 使用 `` 等区分开发/生产路径、级别或 totalSizeCap。 | | **immediateFlush** | 默认 true,设为 false 可减少 IO,换少量丢日志风险,一般保持 true。 | --- ## 四、当前各模块配置要点汇总 | 项目 | 说明 | |------|------| | 滚动策略 | SizeAndTimeBasedRollingPolicy,单文件 1MB,按天+序号归档并压缩为 .gz | | 日志目录 | 各服务写入**各自子目录** `${logging.path}/${FILENAME}/`,如 `C:/project/ext/log/alien-dining/`、`alien-gateway/` 等 | | 当前写入文件 | `${LOG_DIR}/DEBUG.log`、`INFO.log`、`WARN.log`、`ERROR.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) | 使用 `` 等 | 当前配置已无已知逻辑错误;剩余为部署约定与可选性能优化。