spring boot使用log4j2配置,以及class path contains multiple slf4j bindings错误处理

spring boot 默认使用logback日志,但现今主流日志框架为log4j2,我们需要对配置文件做一些简单修改。

首先修改pom.xml排除系统自带的日志依赖,增加log4j2依赖。


    org.springframework.boot
    spring-boot-starter-parent
    2.0.2.RELEASE

 

    UTF-8
    UTF-8
    1.8

 

    
        org.springframework.boot
        spring-boot-starter-web
        
            
                org.springframework.boot
                spring-boot-starter-logging
            
        
    
    
        org.springframework.boot
        spring-boot-starter-log4j2
    

Spring一旦发现classpath下的jar文件,就会自动配置log4j2。我们需要添加 log4j2.xml 或者 (log4j2.properties) 到src/main/resources文件夹下。



    
        %d{yyyy-MM-dd'T'HH:mm:ss.SSSZ} %p %m%n
        c:/temp
    
    
        
            
        
 
        
            
            
                
            
            
        
 
    
    
 
        
            
            
        
 
        
            
        
    

之后我们运行程序,发现程序报错“class path contains multiple slf4j bindings”。具体报错信息如下:

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/app/top-media-frag/lib/logback-classic-1.0.13.
     jar!/org/slf4j/impl/StaticLoggerBinder.class]   
SLF4J: Found binding in [jar:file:/opt/app/top-media-frag/lib/slf4j-log4j12-1.7.5.jar
     !/org/slf4j/impl/StaticLoggerBinder.class]

Maven管理的纯Spring工程中,原本是使用log4j2打log的,结果依赖的库中又另外引用了logback文件(logback与原来的log4j只能二选一),导致配置失效。

使用idea查看依赖图,发现spring-boot-start-logging仍然存在。在maven插件中检查各个依赖项,发现不只spring-boot-starter-web依赖spring-boot-start-logging,spring-boot-starter-actuator也同样依赖spring-boot-start-logging,在pom中排除spring-boot-starter-actuator对spring-boot-start-logging的依赖,重新运行程序,没有报错,运行成功。

Spring虽然实现了一定程度的自动化配置,但是对日志框架配置问题还没有很好的解决,再多个组件依赖日志的时候,还需要手动取排除。

你可能感兴趣的:(Spring学习笔记,spring,boot,log4j2)