1. 日志级别选择不当
- 常见日志级别:
error、warn、info、debug、trace。 - 应根据情况选择恰当级别,避免默认使用
info。
2. 过度日志记录
- 问题:记录过多日志导致文件过大,难以管理。
- 示例:
// 避免过度记录DEBUG级别日志 public void processData() { logger.debug("Entering processData method."); // 业务逻辑 logger.debug("Exiting processData method."); }
3. DEBUG日志用于生产环境
- 应避免将
DEBUG级别日志用于生产环境。 - 示例:
if(log.isDebugEnable()){ logger.debug("This is a debug message, should not be logged in production"); }
4. 日志缺少上下文信息
- 问题:日志未提供足够上下文,不便排查问题。
- 示例:
logger.info("User login request, userId:{}", userId);
5. 同步IO导致性能问题
- 同步日志记录可能阻塞主线程。
- 解决方案:使用异步日志框架,如Log4j 2的异步日志记录器。
6. 日志配置不合理
- 问题:配置文件复杂,存在硬编码路径。
- 示例:
<!-- logback.xml示例 --> <configuration> <property name="LOG_HOME" value="${LOG_HOME:-/var/log/myapp}"/> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_HOME}/tianluoboy.log</file> <!-- 配置省略 --> </appender> <root level="info"> <appender-ref ref="FILE"/> </root> </configuration>
7. 日志内容泄露敏感信息
- 问题:记录敏感信息如密码,存在安全风险。
- 解决方案:不记录敏感信息,对敏感信息进行脱敏或掩码处理。
8. 日志文件轮转和归档配置不当
- 问题:未配置轮转策略,导致日志文件过大。
- 示例:
<!-- logback.xml示例 --> <configuration> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 配置省略 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>tianluoboy.%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> </appender> <root level="info"> <appender-ref ref="FILE"/> </root> </configuration>
9. 日志框架漏洞问题
- 问题:低版本日志框架可能存在安全漏洞。
- 解决方案:升级到最新版本,使用成熟的日志框架,并定时更新维护。
10. 错误配置LevelFilter造成日志重复记录
- 问题:配置不当导致日志重复记录。
- 示例:
<Configuration status="WARN"> <Appenders> <Console name="ConsoleAppender" target="SYSTEM_OUT"> <!-- 配置省略 --> <Filters> <LevelFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/> </Filters> </Console> <File name="FileAppender" fileName="app.log"> <!-- 配置省略 --> <Filters> <LevelFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/> <LevelFilter level="INFO" onMatch="DENY" onMismatch="DENY"/> </Filters> </File> </Appenders> <Loggers> <Root level="DEBUG"> <AppenderRef ref="ConsoleAppender"/> <AppenderRef ref="FileAppender"/> </Root> </Loggers> </Configuration>