记logback不生成日志文件问题

本文解决线上项目中logback不生成日志文件的问题,分析了SLF4J绑定冲突的原因,介绍了如何使用MavenHelper插件定位冲突的jar包,并通过在dependency中排除冲突的slf4j-log4j12和log4j来修复问题。

记logback不生成日志文件问题

问题描述:在线上部署项目模块时发现这个模块不生成日志文件,使用的是logback

发现nohup.out文件中输出:

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/lib/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/lib/logback-classic-1.1.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]

使用Maven Helper插件找出冲突的jar,然后在这个dependency中加入:

<exclusions>
  <exclusion>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
  </exclusion>
  <exclusion>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
  </exclusion>
</exclusions>

可能只需要排除其中的一个,有的地方不需要两个都排除

在升级 `logback-classic` 从版本 1.2.10 到 1.3.15 后,如果应用生成日志文件,这可能与配置兼容性、API 变化或默认行为的更改有关。以下是可能导致问题的原因及排查建议: ### 日志文件生成的可能原因 1. **配置文件路径或格式问题**: - 升级后,某些配置项可能已弃用或变更,导致 `logback.xml` 或 `logback-spring.xml` 文件无法正确解析。 - 确保配置文件位于类路径下的 `resources` 目录中,并且没有语法错误。 2. **Appender 配置变化**: - 某些 Appender(如 `RollingFileAppender`)在新版本中可能有参数调整或属性重命名。 - 检查是否使用了已被移除或更名的 Appender 类型,例如 `<appender class="ch.qos.logback.core.FileAppender">` 是否仍适用。 - 示例配置片段如下: ```xml <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>logs/app.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- daily rollover --> <fileNamePattern>logs/app.%d{yyyy-MM-dd}.log</fileNamePattern> </rollingPolicy> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> ``` 3. **自动配置冲突(Spring Boot 用户)**: - 如果使用 Spring Boot,默认的日志配置可能会覆盖自定义的 `logback.xml`。 - 可以通过设置 `logging.config=classpath:logback.xml` 明确指定配置文件位置。 - 同时检查是否引入了多个日志实现(如同时存在 logback 和 log4j),造成冲突。 4. **依赖版本一致或冲突**: - 确保 `logback-core` 与 `logback-classic` 的版本保持一致。 - 使用 Maven 或 Gradle 检查依赖树,排除旧版本干扰。 - 示例 Maven 排除方式: ```xml <dependency> <groupId>some.group</groupId> <artifactId>some-artifact</artifactId> <exclusions> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </exclusion> </exclusions> </dependency> ``` 5. **日志级别设置过低**: - 检查日志输出级别(如 `level="INFO"`)是否限制了日志输出。 - 可尝试临时将根日志级别设为 `DEBUG` 或 `TRACE`,确认是否有日志输出: ```xml <root level="DEBUG"> <appender-ref ref="FILE" /> </root> ``` 6. **Logback 内部状态输出**: - 添加如下配置启用 Logback 内部状态输出,帮助诊断配置加载问题: ```xml <configuration debug="true"> ``` - 这会在控制台打印 Logback 的内部状态信息,有助于发现配置加载失败或 Appender 初始化异常等问题。 7. **文件权限或路径可写**: - 确保日志文件所在目录具有写权限,尤其是在生产环境或容器中运行时。 - 可尝试修改日志路径为 `/tmp/logs/app.log` 测试是否能正常生成日志。 ### 兼容性提示 - **版本 1.3.x 中的变化**: - Logback 1.3 版本引入了一些破坏性变更,部分 API 被重构或移除[^4]。 - 例如,某些内部类和方法被标为私有,影响第三方库对 Logback 的扩展。 - 建议查阅 [Logback 1.3 Release Notes](https://logback.qos.ch/news.html) 获取详细变更说明。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值