开发者社区> 问答> 正文

当项目中有多个日志jar包时,配置失效?

项目中存在log4j 和 slf4j 两种,配置使用slf4j没用,查看代码是优先使用log4j,导致配置了slf4j失效

原提问者GitHub用户cser-feng

展开
收起
山海行 2023-07-05 22:01:24 69 0
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    在Java应用程序中,通常会使用日志框架来记录应用程序的运行日志。常见的日志框架包括Log4j、Logback、Java Logging API等。但是,在一个项目中同时使用多个日志框架可能会导致配置失效的问题。
    可以尝试如下解决方案:

    只使用一个日志框架:为避免配置失效的问题,建议在一个项目中只使用一个日志框架。可以选择一个常用的日志框架,例如Log4j或Logback,并将其他日志框架从项目中移除。

    配置桥接器:如果必须在一个项目中使用多个日志框架,可以尝试使用配置桥接器(Configuration Bridge)来解决问题。桥接器可以将一个日志框架的配置转换为另一个日志框架的配置,并将日志输出到另一个日志框架中。例如,可以使用Log4j-to-SLF4J桥接器将Log4j的配置转换为SLF4J的配置,并将日志输出到SLF4J中。

    解决类加载器问题:如果存在类加载器问题,可以尝试通过调整类加载器的顺序或者将日志框架的类加载器设置为父类加载器来解决问题。在Web应用程序中,也可以尝试将日志框架的JAR文件放到公共的类路径中,从而避免类加载器问题。

    2023-07-29 23:16:06
    赞同 展开评论 打赏
  • 你可以通过JVM启动参数配置,-Ddruid.logType=slf4j

    原回答者GitHub用户wenshao

    2023-07-06 12:58:39
    赞同 展开评论 打赏
  • 在 Java 项目中,常常存在多种日志框架共存的情况。当使用多个日志框架时,容易出现配置失效的情况。这种情况下,需要指定特定的日志框架或调整日志框架之间的依赖关系,以便正确加载和使用相应的日志配置文件。

    针对您提出的问题,可以尝试以下解决方案:

    移除多余的日志框架。可以根据实际需求,只保留需要的日志框架,并将无用的日志框架从项目中移除。

    指定日志框架优先级。在存在多个日志框架时,可以通过配置优先级的方式来指定使用特定的日志框架。例如,在使用 log4j 和 slf4j 共存时,可以将 slf4j 的优先级设置为更高,以便优先使用 slf4j 的日志配置。配置代码如下所示:

    配置默认的日志实现

    org.slf4j.impl.StaticLoggerBinder.DEFAULT_LOGGING_SYSTEM_PROPERTY=slf4j

    配置使用 log4j 的日志实现

    log4j.rootLogger=DEBUG, LOGFILE

    配置使用 slf4j 的日志实现

    log4j.logger.org.slf4j=DEBUG, LOGFILE

    以上配置文件指定了默认使用 slf4j 的日志实现,当需要使用 log4j 日志框架时,可以通过 log4j.logger 参数进行设置。

    调整日志框架依赖关系。在使用多个日志框架时,可能出现各种依赖关系问题,例如 A 依赖于 B,B 依赖于 C,而 C 又依赖于 A。这种情况容易导致配置失效,并可能影响程序的正常运行。为了避免这种问题,需要考虑调整各个日志框架之间的依赖关系或版本依赖问题,以便获得良好的兼容性和稳定性。

    2023-07-06 09:16:25
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PostgresChina2018_赖思超_PostgreSQL10_hash索引的WAL日志修改版final 立即下载
Kubernetes下日志实时采集、存储与计算实践 立即下载
日志数据采集与分析对接 立即下载