75882a2a6c1847128eea068e7cb02e290c8e61fb.svn-base 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. # 日志配置说明
  2. ## 配置文件说明
  3. ### 1. log4j2.xml(生产环境)
  4. - **用途**:生产环境默认配置
  5. - **特点**:
  6. - 业务日志:INFO级别
  7. - SQL日志:不输出(避免性能影响)
  8. - 框架日志:WARN级别(减少噪音)
  9. - 错误日志:单独文件,保留90天
  10. - 普通日志:保留30天
  11. - SQL日志:保留7天
  12. ### 2. log4j2-dev.xml(开发环境)
  13. - **用途**:开发调试时使用
  14. - **特点**:
  15. - 业务日志:DEBUG级别
  16. - SQL日志:DEBUG级别,输出到单独的sql.log文件
  17. - 框架日志:INFO/DEBUG级别
  18. - 控制台彩色输出,便于区分不同级别
  19. ## 如何切换日志配置
  20. ### 方法1:通过JVM参数指定(推荐)
  21. **开发环境:**
  22. ```bash
  23. java -Dlogging.config=classpath:log4j2-dev.xml -jar your-app.jar
  24. ```
  25. **生产环境:**
  26. ```bash
  27. java -Dlogging.config=classpath:log4j2.xml -jar your-app.jar
  28. ```
  29. ### 方法2:在IDEA中配置
  30. 1. Run -> Edit Configurations
  31. 2. 在 VM options 中添加:
  32. ```
  33. -Dlogging.config=classpath:log4j2-dev.xml
  34. ```
  35. ### 方法3:通过application.properties指定
  36. 在 `application.properties` 中添加:
  37. ```properties
  38. logging.config=classpath:log4j2-dev.xml
  39. ```
  40. ## 日志文件说明
  41. ### 生产环境日志文件
  42. ```
  43. logs/
  44. ├── dc-api.log # 主日志文件(INFO及以上)
  45. ├── dc-api-error.log # 错误日志(仅ERROR)
  46. ├── dc-api-sql.log # SQL日志(仅开发环境)
  47. └── 2026-05/ # 按月份归档
  48. ├── dc-api-2026-05-23-1.log.gz
  49. ├── dc-api-error-2026-05-23-1.log.gz
  50. └── dc-api-sql-2026-05-23-1.log.gz
  51. ```
  52. ### 日志保留策略
  53. - **普通日志**:保留30天,单个文件最大50MB
  54. - **错误日志**:保留90天,单个文件最大50MB
  55. - **SQL日志**:保留7天,单个文件最大100MB
  56. ## 日志级别说明
  57. ### 推荐的日志级别使用
  58. | 级别 | 使用场景 | 示例 |
  59. |------|---------|------|
  60. | ERROR | 系统错误、异常 | 数据库连接失败、空指针异常 |
  61. | WARN | 警告信息 | 配置项缺失、降级处理 |
  62. | INFO | 重要业务流程 | 用户登录、订单创建 |
  63. | DEBUG | 调试信息 | 方法参数、中间结果 |
  64. | TRACE | 详细跟踪 | 循环中的每一步 |
  65. ### 代码中使用示例
  66. ```java
  67. import org.slf4j.Logger;
  68. import org.slf4j.LoggerFactory;
  69. public class YourService {
  70. private static final Logger log = LoggerFactory.getLogger(YourService.class);
  71. public void process() {
  72. log.info("开始处理业务");
  73. log.debug("参数值: {}", param);
  74. try {
  75. // 业务逻辑
  76. } catch (Exception e) {
  77. log.error("处理失败", e); // 自动包含完整堆栈
  78. }
  79. }
  80. }
  81. ```
  82. ## 查看日志的技巧
  83. ### 1. 实时查看错误日志
  84. ```bash
  85. # Linux/Mac
  86. tail -f logs/dc-api-error.log
  87. # Windows PowerShell
  88. Get-Content logs/dc-api-error.log -Wait -Tail 50
  89. ```
  90. ### 2. 查看SQL日志(开发环境)
  91. ```bash
  92. tail -f logs/dc-api-sql.log
  93. ```
  94. ### 3. 搜索特定错误
  95. ```bash
  96. # 查找今天的错误
  97. grep "2026-05-23" logs/dc-api-error.log
  98. # 查找特定类的错误
  99. grep "YourClassName" logs/dc-api-error.log
  100. ```
  101. ### 4. 统计错误数量
  102. ```bash
  103. # 统计今天的错误数
  104. grep -c "2026-05-23" logs/dc-api-error.log
  105. ```
  106. ## 性能优化建议
  107. 1. **生产环境不要开启DEBUG级别**:会显著影响性能
  108. 2. **SQL日志仅在开发时开启**:生产环境会生成大量日志
  109. 3. **使用占位符而不是字符串拼接**:
  110. ```java
  111. // ✅ 推荐
  112. log.debug("User: {}, Age: {}", name, age);
  113. // ❌ 不推荐
  114. log.debug("User: " + name + ", Age: " + age);
  115. ```
  116. 4. **大对象日志要谨慎**:避免日志文件过大
  117. 5. **定期清理旧日志**:已配置自动清理,但也要监控磁盘空间
  118. ## 常见问题
  119. ### Q1: 为什么看不到SQL日志?
  120. A: 确保使用了 `log4j2-dev.xml` 配置,并且DAO包的日志级别是DEBUG。
  121. ### Q2: 错误日志太多怎么办?
  122. A:
  123. - 检查是否有重复的异常捕获
  124. - 对于预期内的异常,使用WARN级别
  125. - 只记录真正需要关注的错误
  126. ### Q3: 日志文件太大?
  127. A:
  128. - 已配置自动滚动和压缩
  129. - 检查是否有不必要的DEBUG日志
  130. - 调整文件大小限制(SizeBasedTriggeringPolicy)
  131. ### Q4: 如何临时开启某个包的DEBUG日志?
  132. A: 在log4j2.xml中添加:
  133. ```xml
  134. <Logger name="com.your.package" level="debug" additivity="false">
  135. <AppenderRef ref="Console"/>
  136. <AppenderRef ref="InfoFile"/>
  137. </Logger>
  138. ```
  139. ## 监控和告警
  140. 建议配置日志监控:
  141. 1. **错误日志增长过快**:可能系统出现问题
  142. 2. **磁盘空间不足**:日志文件占用过多空间
  143. 3. **特定错误频繁出现**:需要修复bug
  144. 可以使用工具:
  145. - ELK Stack(Elasticsearch + Logstash + Kibana)
  146. - Grafana + Loki
  147. - 阿里云SLS
  148. - 腾讯云CLS