log4j:WARN No appenders could be found for logger (org.springframework.web.context.support.Standard

log4j:WARN No appenders could be found for logger (org.springframework.web.context.support.StandardServletEnvironment)

 

1 原因是使用log4j1,需要从依赖中找到所有的log4j 依赖将其排除!即可解决

文章最后给出springboot配置的参考依赖。

下图是:是使用log4j1的debug

将该依赖删除


    org.springframework.cloud
    spring-cloud-dependencies
    Camden.SR5
    pom
    import

 

log4j:WARN No appenders could be found for logger (org.springframework.web.context.support.Standard_第1张图片

下图是 log体系图,解读:各个log实现通过桥接器可以实现互通的,主流还是 使用slf4j门面模式

如:tomcat 和 springboot 分别使用了不同的日志实现

Commons-logging 是tomcat默认的日志系统;

springboot 默认使用的是logback日志实现,common-logs并没有logback的实现;

 

log4j:WARN No appenders could be found for logger (org.springframework.web.context.support.Standard_第2张图片

3 maven日志相关的关键配置
 


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

com.aliyun.openservices
    loghub-client-lib
    
        
            log4j
            log4j
        
    
    0.6.15 


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






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


spring boot starter 的日志依赖
   
      ch.qos.logback
      logback-classic
      1.2.3
      compile
    
    
      org.apache.logging.log4j
      log4j-to-slf4j
      2.10.0
      compile
    
    
      org.slf4j
      jul-to-slf4j
      1.7.25
      compile
    





4 常见问题

4.1 springboot 2 也引入了log4j2的实现,多个门面实现怎么办?
如果: springboot使用了log4j2的实现 同时也使用了 logback 就冲突了,  必须排除一个
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Users/xiayin/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/xiayin/.m2/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.10.0/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
S

解决方法:将web依赖中的spring-boot-starter包,排除logback依赖


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




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

4.2 tomcat日志不打印了,只用springboot的日志,如何解? 

因为springboot 默认使用的是logback日志实现,common-logs并没有logback的实现;必须使用桥接器,将tomcat的日志输出到门面接口;

解决方案:

log4j:WARN No appenders could be found for logger (org.springframework.web.context.support.Standard_第3张图片



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

目的是引入 log4j-slf4j-impl 依赖包,输出jcl日志。如:阿里云 tablestore项目依赖的也是强 log4j-slf4j-impl

log4j:WARN No appenders could be found for logger (org.springframework.web.context.support.Standard_第4张图片

 

4.3  springboot 2.0+ 默认log实现有几个?

logback实现

  ch.qos.logback
  logback-classic
  1.2.3
  compile
  true
log4j2实现

  org.apache.logging.log4j
  log4j-api
  2.10.0
  compile
  true


  org.apache.logging.log4j
  log4j-core
  2.10.0
  compile
  true

4.4 其他问题  基本解决方法也是定位到,核心包依赖问题上。

5 常用log4j2.xml






    
    
        
        
            
            
        
        
        
            
            
            

            
                
                
            
        
        
            
            
            
                
                
            
            
            
        
        
        
            
            
            
                
                
            
        
        
        
            
            
            
                
                
            
        
    
    
    
        
        
        
        
            
        
        
            
            
            
            
        
    

 

你可能感兴趣的:(java,springboot,小程序)