LOGGING_README.md 4.8 KB

日志配置说明

配置文件说明

1. log4j2.xml(生产环境)

  • 用途:生产环境默认配置
  • 特点
    • 业务日志:INFO级别
    • SQL日志:不输出(避免性能影响)
    • 框架日志:WARN级别(减少噪音)
    • 错误日志:单独文件,保留90天
    • 普通日志:保留30天
    • SQL日志:保留7天

2. log4j2-dev.xml(开发环境)

  • 用途:开发调试时使用
  • 特点
    • 业务日志:DEBUG级别
    • SQL日志:DEBUG级别,输出到单独的sql.log文件
    • 框架日志:INFO/DEBUG级别
    • 控制台彩色输出,便于区分不同级别

如何切换日志配置

方法1:通过JVM参数指定(推荐)

开发环境:

java -Dlogging.config=classpath:log4j2-dev.xml -jar your-app.jar

生产环境:

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 中添加:

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 详细跟踪 循环中的每一步

代码中使用示例

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. 实时查看错误日志

# Linux/Mac
tail -f logs/dc-api-error.log

# Windows PowerShell
Get-Content logs/dc-api-error.log -Wait -Tail 50

2. 查看SQL日志(开发环境)

tail -f logs/dc-api-sql.log

3. 搜索特定错误

# 查找今天的错误
grep "2026-05-23" logs/dc-api-error.log

# 查找特定类的错误
grep "YourClassName" logs/dc-api-error.log

4. 统计错误数量

# 统计今天的错误数
grep -c "2026-05-23" logs/dc-api-error.log

性能优化建议

  1. 生产环境不要开启DEBUG级别:会显著影响性能
  2. SQL日志仅在开发时开启:生产环境会生成大量日志
  3. 使用占位符而不是字符串拼接

    // ✅ 推荐
    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中添加:

<Logger name="com.your.package" level="debug" additivity="false">
    <AppenderRef ref="Console"/>
    <AppenderRef ref="InfoFile"/>
</Logger>

监控和告警

建议配置日志监控:

  1. 错误日志增长过快:可能系统出现问题
  2. 磁盘空间不足:日志文件占用过多空间
  3. 特定错误频繁出现:需要修复bug

可以使用工具:

  • ELK Stack(Elasticsearch + Logstash + Kibana)
  • Grafana + Loki
  • 阿里云SLS
  • 腾讯云CLS