Log4j2设置与使用(基于Spring4的Maven项目)

Maven配置

属性设置:


    2.5

依赖设置:



    org.apache.logging.log4j
    log4j-core
    2.5


    org.apache.logging.log4j
    log4j-api
    2.5


    org.apache.logging.log4j
    log4j-web
    2.5

如果同时使用了slf4j包(例如使用quartz包就会自带一个slf4j包的依赖),则需额外添加依赖包(这个包目前还是beta版,以后可以查一下有没有新版的可以替换):


    org.apache.logging.log4j
    log4j-slf4j-impl
    2.0-beta9

web.xml配置

添加listener和filter:



    org.apache.logging.log4j.web.Log4jServletContextListener


    log4jServletFilter
    org.apache.logging.log4j.web.Log4jServletFilter


    log4jServletFilter
    /*
    REQUEST
    FORWARD
    INCLUDE
    ERROR


添加配置文件

log4j2不再支持原来的log4j.properties配置。如需修改默认配置,需在classpath下配置log4j2.xml文件。

在不设置log4j2.xml文件时,log4j2默认采用下面的配置[1]



    
        
            
        
    
    
        
            
        
    

该配置只有一个Appender:Console,目标是SYSTEM_OUT,即日志内容,都会打印在eclipse控制台上。Root Logger的级别是error,即:所有error及以上级别的日志才会记录。(注:日志级别顺序为 TRACE < DEBUG < INFO < WARN < ERROR < FATAL ),所以最终只有2日志会输出(error,fatal)。

配置第1行中的status="WARN",可以去掉,它的含义为是否记录log4j2本身的event信息,默认是OFF,设置成“WARN”指:所有log4j2的event信息中,只有WARN及以上级别的信息才记录。

下面是一个非默认log4j2.xml的配置范例:


 
    
        ${sys:catalina.home}/webapps
        testApp/logs
        testApp
    
    
        
            
        
        
            
            
                
                
            
            
        
    
    
        
            
        
        
            
        
    

monitorInterval="1800" 指log4j2每隔1800秒(半小时),自动监控该配置文件是否有变化,如果变化,则自动根据文件内容重新配置;

RollingRandomAccessFile 即表示以文件方式记录,注意一下filePattern 的设置,它与20行的SizeBasedTriggeringPolicy (表示单个文件最大多少容量)结合在一起,非常有用,以这段配置为例,当单个文件达到10M后,会自动将以前的内容,先创建(年-月)的目录,然后按 "xxx-年-月-日-序号"命名,打成压缩包;

DefaultRolloverStrategy max="20"表示压缩包,最多保留20个

Logger标签定义一个新logger,在level中设置级别 ,使用文件方式来记录日志,additivity="true" 这里注意一下,因为下面还有一个root logger,任何其它的logger最终都相当于继承自root logger,所以“com.test.common.TestApp”这个logger中,如果记录了info及以上级别的日志,除了文件里会记录外,root logger也会生效,即:控制台也会输出一次。如果把additivity="true" 中的true,改成false,root logger就不会再起作用,即只会记录在文件里,控制台无输出。

另外关于logger的命名,对于Logger配置中已经明确指定类名的(例如上面例子里的com.test.common.TestApp),那么在生成logger时,可以不用指定classname:

static Logger logger = LogManager.getLogger();

配置中的同名logger,相当于只对这一个类起作用。

参考链接:

[1] log4j2与spring mvc整合
[2] log4j2官方user's guide(PDF)

你可能感兴趣的:(Log4j2设置与使用(基于Spring4的Maven项目))