# 日志配置说明 ## 配置文件说明 ### 1. log4j2.xml(生产环境) - **用途**:生产环境默认配置 - **特点**: - 业务日志:INFO级别 - SQL日志:不输出(避免性能影响) - 框架日志:WARN级别(减少噪音) - 错误日志:单独文件,保留90天 - 普通日志:保留30天 - SQL日志:保留7天 ### 2. log4j2-dev.xml(开发环境) - **用途**:开发调试时使用 - **特点**: - 业务日志:DEBUG级别 - SQL日志:DEBUG级别,输出到单独的sql.log文件 - 框架日志:INFO/DEBUG级别 - 控制台彩色输出,便于区分不同级别 ## 如何切换日志配置 ### 方法1:通过JVM参数指定(推荐) **开发环境:** ```bash java -Dlogging.config=classpath:log4j2-dev.xml -jar your-app.jar ``` **生产环境:** ```bash java -Dlogging.config=classpath:log4j2.xml -jar your-app.jar ``` ### 方法2:在IDEA中配置 1. Run -> Edit Configurations 2. 在 VM options 中添加: ``` -Dlogging.config=classpath:log4j2-dev.xml ``` ### 方法3:通过application.properties指定 在 `application.properties` 中添加: ```properties logging.config=classpath:log4j2-dev.xml ``` ## 日志文件说明 ### 生产环境日志文件 ``` logs/ ├── dc-api.log # 主日志文件(INFO及以上) ├── dc-api-error.log # 错误日志(仅ERROR) ├── dc-api-sql.log # SQL日志(仅开发环境) └── 2026-05/ # 按月份归档 ├── dc-api-2026-05-23-1.log.gz ├── dc-api-error-2026-05-23-1.log.gz └── dc-api-sql-2026-05-23-1.log.gz ``` ### 日志保留策略 - **普通日志**:保留30天,单个文件最大50MB - **错误日志**:保留90天,单个文件最大50MB - **SQL日志**:保留7天,单个文件最大100MB ## 日志级别说明 ### 推荐的日志级别使用 | 级别 | 使用场景 | 示例 | |------|---------|------| | ERROR | 系统错误、异常 | 数据库连接失败、空指针异常 | | WARN | 警告信息 | 配置项缺失、降级处理 | | INFO | 重要业务流程 | 用户登录、订单创建 | | DEBUG | 调试信息 | 方法参数、中间结果 | | TRACE | 详细跟踪 | 循环中的每一步 | ### 代码中使用示例 ```java import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class YourService { private static final Logger log = LoggerFactory.getLogger(YourService.class); public void process() { log.info("开始处理业务"); log.debug("参数值: {}", param); try { // 业务逻辑 } catch (Exception e) { log.error("处理失败", e); // 自动包含完整堆栈 } } } ``` ## 查看日志的技巧 ### 1. 实时查看错误日志 ```bash # Linux/Mac tail -f logs/dc-api-error.log # Windows PowerShell Get-Content logs/dc-api-error.log -Wait -Tail 50 ``` ### 2. 查看SQL日志(开发环境) ```bash tail -f logs/dc-api-sql.log ``` ### 3. 搜索特定错误 ```bash # 查找今天的错误 grep "2026-05-23" logs/dc-api-error.log # 查找特定类的错误 grep "YourClassName" logs/dc-api-error.log ``` ### 4. 统计错误数量 ```bash # 统计今天的错误数 grep -c "2026-05-23" logs/dc-api-error.log ``` ## 性能优化建议 1. **生产环境不要开启DEBUG级别**:会显著影响性能 2. **SQL日志仅在开发时开启**:生产环境会生成大量日志 3. **使用占位符而不是字符串拼接**: ```java // ✅ 推荐 log.debug("User: {}, Age: {}", name, age); // ❌ 不推荐 log.debug("User: " + name + ", Age: " + age); ``` 4. **大对象日志要谨慎**:避免日志文件过大 5. **定期清理旧日志**:已配置自动清理,但也要监控磁盘空间 ## 常见问题 ### Q1: 为什么看不到SQL日志? A: 确保使用了 `log4j2-dev.xml` 配置,并且DAO包的日志级别是DEBUG。 ### Q2: 错误日志太多怎么办? A: - 检查是否有重复的异常捕获 - 对于预期内的异常,使用WARN级别 - 只记录真正需要关注的错误 ### Q3: 日志文件太大? A: - 已配置自动滚动和压缩 - 检查是否有不必要的DEBUG日志 - 调整文件大小限制(SizeBasedTriggeringPolicy) ### Q4: 如何临时开启某个包的DEBUG日志? A: 在log4j2.xml中添加: ```xml ``` ## 监控和告警 建议配置日志监控: 1. **错误日志增长过快**:可能系统出现问题 2. **磁盘空间不足**:日志文件占用过多空间 3. **特定错误频繁出现**:需要修复bug 可以使用工具: - ELK Stack(Elasticsearch + Logstash + Kibana) - Grafana + Loki - 阿里云SLS - 腾讯云CLS