IDEA整合日志框架Log4j2+Slf4j详细配置过程

IDEA整合日志框架Log4j2+Slf4j详细配置过程

日志框架这么多,他们之间到底是什么关系呢?笼统的讲就是slf4j是一系列的日志接口,而log4j2、logback是具体实现了接口功能的日志框架。现在的主流日志接口都使用slf4j,而日志的实现就见仁见智了,至于他们的关系请自行百度,此处选择log4j2作为实现框架。网上看到的教程要么对代码没有解释,对新手不友好;要么时间比较久远,跟不上时代。这里使用新版本并结合大量注释,力求简洁明了,有什么问题欢迎留言交流。

运行环境:

  • log4j2 2.8.2 + slf4j 1.7.25
  • IntelliJ IDEA 2017.2.5
  • maven 3.0.5

配置过程

Step 1:导入maven依赖


    
        1.7.25
        2.8.2
    

     
            org.slf4j
            slf4j-api
            ${slf4j.version}
        
        
            org.apache.logging.log4j
            log4j-slf4j-impl
            ${log4j.version}
        
        
            org.apache.logging.log4j
            log4j-web
            ${log4j.version}
            runtime
        
        
            org.apache.logging.log4j
            log4j-api
            ${log4j.version}
        
        
            org.apache.logging.log4j
            log4j-core
            ${log4j.version}
             

 

 

Step 2:添加配置文件

配置文件可以直接在resources文件夹下创建,文件名为log4j2.xml,log4j2的相关组件会自动扫描log4j2.xml或log4j2.properties(log4j2 同时支持多种属性配置方式,log4j2.xml或log4j2.properties为官方指定的配置文件名,具体信息参见官方文档)。该文件夹是IDEA专门用来存放各种配置文件的地方,如果使用前面所示的文件名就不需要指定配置文件的位置。如果想放在其他文件夹下,则需要在web.xml文件中添加如下配置:

    
        log4jConfiguration
        
        classpath:conf/log4j2.xml
        

 

我的配置文件log4j2.xml内容如下(此处并没有将日志信息输出到外部文件)






    
    
    
    
    
         
             
        
    
    
    
         
             
        
        
        
             
        
    
 

 

如果使用log4j2.properties的形式配置log4j2,则参见如下配置(两个配置文件不属于同一个项目,所以配置信息略有不同):

 

# 指定log4j2内部的日志输出级别,低于指定级别的日志将不会输出,ALL表示输出所有日志信息
# 日志级别:ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF
status = warn
# 配置日志信息输出到哪里:err表示作为标准错误输出,还可以是一个文件路径或者一个URL
dest = err
# 指定配置的名称
name = Log4jPropertiesConfig
#使用“property.* ”来指定下方可能用到的属性值
property.RollingFileName = target/log/log4j2test.log
property.ConsoleLogLevel = info

filter.threshold.type = ThresholdFilter
filter.threshold.level = debug

# ConsoleAppender:定义输出到命令行的日志输出器
# ThresholdFilter:临界值过滤器,过滤掉低于指定临界值的日志。当日志级别低于临界值时,日志输出会被拒绝
appender.console.type = Console
appender.console.name = Console_OUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} [%p] %c: %msg%n
appender.console.filter.threshold.type = ThresholdFilter
appender.console.filter.threshold.level = ${ConsoleLogLevel}

# RollingFileAppender:输出到滚动文件的日志输出,它会判断文件是否满足封存文件的要求,若满足,则将文件封存并把日志写入到下一个滚动文件。
# RollingFileAppender需要TriggeringPolicy来指定触发封存的条件,还需要RolloverStrategy来告诉输出器如何封存文件
# 此处使用复合型触发策略(时间和文件大小),具体配置参考:http://blog.csdn.net/henry115/article/details/78483457
appender.rolling.type = RollingFile
appender.rolling.name = RollingFile
appender.rolling.fileName = ${RollingFileName}
appender.rolling.filePattern = target/log/log1-%d{yy-MM-dd-HH-mm-ss}-%i.log.gz
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = %d{yyyy-MM-dd HH:mm:ss.SSS} [%p] %C{1.} [%t]: %msg%n
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.policies.time.interval = 12
appender.rolling.policies.time.modulate = true
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size=100MB
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.max = 10

# 定义名字为TestController的Logger,其日志级别为debug
# Logger日志信息输出的目的地由“logger.rolling.appenderRef.rolling.ref”指定
# 当“logger.rolling.additivity”属性值为false时,则子Logger只会在自己的appender里输出
#logger.rolling.level = debug
logger.rolling.name = MainController
logger.rolling.additivity = false
logger.rolling.appenderRef.rolling.ref = Console_OUT

# 此处指定日志输出级别无效,输出级别由其引用的输出器指定
rootLogger.level = info
rootLogger.appenderRef.stdout.ref = Console_OUT

 

 

Step 3: 在Java文件中使用slf4j打印日志信息:

 此处注意Logger的名称必须与配置文件中对应

 

@Controller
public class MainController {
    // 获取log4j2.xml文件中定义的名为“MainLogger”的Logger
    // 如果没有对应名称的Logger,则无法使用Logger记录和输出日志信息
    private static final Logger log = LoggerFactory.getLogger("MainLogger");

    @RequestMapping(value = "/test")
    public String test(){
        log.info("info...");
        log.debug("debug...");
        log.warn("warn...");
        log.error("error...");
        return "test";
    }
}

 

 

你可能感兴趣的:(JaveEE)