Log4j2

一、log4j2概述

  在日常的开发,测试和生产环境中,日志记录了应用,服务运行过程中的关键信息,以及出现异常时的堆栈,这些信息常常作为查询,定位,解决问题的关键,因此在任何系统中,对日志的使用得当,将极大的提高程序问题解决的效率。

  Log4j的1.x版本虽然已经被广泛使用于很多应用程序中,但由于出现内存泄漏等bug,代码难以维护,以及需要使用老版本的jdk等劣势,在2015年8月已经玩完。它的替代品,SLF4J,Logback,Log4j2对日志框架做了很多必要的改进。

  SLF4J:SLF4J是众多日志系统的内核,提供统一的接口,不提供具体实现,不是具体可使用可配置的日志系统。

  Logback:提供了对SLF4J具体实现的日志系统,相比Log4j1.x,Logback的性能,使用场景,内存使用等方面的优化要远远强于Log4j1.x。

  Log4j2:Log4j2虽然在各个方面都与logback非常相似,但是却提供了更强的性能和并发性,下一代异步logger,易于拓展自定义需求的架构,是目前使用十分广泛的日志框架。

二、log4j2配置节点说明

(1)LoggerContext:日志系统上下文
(2)Configuration:每一个 LoggerContext 都有一个有效的 Configuration, Configuration 包含所有的Appender 、Filter、LoggerConfig ,StrSubstitutor引用和对Layout的格式设置。有两个属性:
       status用来指定log4j本身的打印日志的级别.
       monitorinterval用于指定log4j自动重新配置的监测间隔时间,单位是s,最小是5s.
      有两个子节点:Appenders和Loggers(表明可以定义多个Appender和Logger).
(3)子节点Appender:Log4j2 还允许将记录请求输出到多个目标中,而这种输出目标被称为Appender。目前Appender的类型有控制台、文件、socket、Apache Flume、JMS、远程UNIX 系统日志守护进程以及各种数据库API,用户可以根据需要选择将日志输出到不同的目标上,同时在一个Logger的配置中,允许开启多个Appender。
常见的有三种子节点:Console、RollingFile、File.
    Console节点用来定义输出到控制台的Appender.
        name:指定Appender的名字.
        target:SYSTEM_OUT 或 SYSTEM_ERR,一般只设置默认:SYSTEM_OUT.
        PatternLayout:输出格式,不设置默认为:%m%n.
    File节点用来定义输出到指定位置的文件的Appender.
        name:指定Appender的名字.
        fileName:指定输出日志的目的文件带全路径的文件名.
        PatternLayout:输出格式,不设置默认为:%m%n.
    RollingFile节点用来定义超过指定大小自动删除旧的创建新的的Appender.
        name:指定Appender的名字.
        fileName:指定输出日志的目的文件带全路径的文件名.
        PatternLayout:输出格式,不设置默认为:%m%n.
        filePattern:指定新建日志文件的名称格式.
        Policies:指定滚动日志的策略,就是什么时候进行新建日志文件输出日志.
           TimeBasedTriggeringPolicy:Policies子节点,基于时间的滚动策略,interval属性用来指定多久滚动一次,默认是1 hour。modulate=true用来调整时间:比如现在是早上3am,interval是4,那么第一次滚动是在4am,接着是8am,12am...而不是7am.
     SizeBasedTriggeringPolicy:Policies子节点,基于指定文件大小的滚动策略,size属性用来定义每个日志文件的大小.
     DefaultRolloverStrategy:用来指定同一个文件夹下最多有几个日志文件时开始删除最旧的,创建新的(通过max属性)。
(4)子节点Logger : Logger继承自 AbstractLogger,当配置被修改后,它将与不同的 LoggerConfig 相关联,这导致其行为也被改变。
常见的有两种:Root和Logger.
       Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出
         level:日志输出级别.
         AppenderRef:Root的子节点,用来指定该日志输出到哪个Appender.
       Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。
         level:日志输出级别
         name:用来指定该Logger所适用的类或者类所在的包全路径,继承自Root节点.
         AppenderRef:Logger的子节点,用来指定该日志输出到哪个Appender,如果没有指定,就会默认继承自Root.如果指定了,那么会在指定的这个Appender和Root的Appender中都会输出,此时我们可以设置Logger的additivity="false"只在自定义的Appender中进行输出。
(4)LoggerConfig:LoggerConfig 对象在 Logger 被声明时创建,它包含了一组用于处理事件的Appender引用,以及一组用于过滤传递给Appender事件的Filter,相当于是Appender的集合。
(5)Filter :Log4j2 提供了Filter 来过滤消息事件,它可被应用于事件传递给LoggerConfig之前,及传递给LoggerConfig之后,即LoggerConfig的前后置拦截器。
Filter包含了三种行为:Accept,Deny或Neutral,其中Accept,Deny分别代表着接受和拒绝,即过滤器接受或拒绝某种日志过滤表达式等,经过这两种行为处理后将不再经过其他过滤器。
Neutral代表着中立,意味着事件应由其他Filter来处理。如果未配置任何Filter,那么事件将直接被处理。
(6)Layout:Log4j2除了可以输出到不同的目标Appender之外,还支持在目标中定义自定义的日志格式,Layout 负责对日志事件进行格式化,通过配置PatternLayout来实现。
(7)StrSubstitutor和StrLookup:这两个组件用来对Log4j2中的各项配置进行动态变量赋值。
(8)日志级别:LoggerConfig会被分配一个日志级别,共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF.
      All:最低等级的,用于打开所有日志记录.
      Trace:是追踪,就是程序推进以下,你就可以写个trace输出,所以trace应该会特别多,不过没关系,我们可以设置最低日志级别不让他输出.
      Debug:指出细粒度信息事件对调试应用程序是非常有帮助的.
      Info:消息在粗粒度级别上突出强调应用程序的运行过程.
      Warn:输出警告及warn以下级别的日志.
      Error:输出错误信息日志.
      Fatal:输出每个严重的错误事件将会导致应用程序的退出的日志.
      OFF:最高等级的,用于关闭所有日志记录.
      程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。

三、log4j2简单默认配置

  (1)对Log4j2配置的使用首先需要引入对应的core和api包,需要注意的是,如果项目中只引入了jar包而没有对应的log4j2.xml配置文件,那么在eclipse中运行时则会打印如ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console 的异常信息,并且输出logger时可以看到只有error和fatal级别的被输出来,是因为没有配置文件就使用默认的,默认级别是error,所以只有error和fatal输出来。


        1.7.21
        2.11.0
    

    
        
            org.slf4j
            slf4j-log4j12
            ${slf4j.version}
        

        
            org.apache.logging.log4j
            log4j-api
            runtime
            ${log4j.version}
        

        
            org.apache.logging.log4j
            log4j-core
            runtime
            ${log4j.version}
        

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

        
        
            org.apache.logging.log4j
            log4j-web
            runtime
            ${log4j.version}
        

        
        
            com.lmax
            disruptor
            runtime
            3.4.2
        

        

  (2)配置简单的log4j2.xml配置文件


 
 
 
 
     
     
     
         
         
             
         
     
         
                     
             
             
             
                 
                 
             
         
         
             
             
             
                 
                 
             
         
     
     
     
         
         
         
         
         
             
             
             
         
     
 

  

你可能感兴趣的:(log4j,log,日志)