| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- # 日志配置说明
- ## 配置文件说明
- ### 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
- <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
|