zoukankan      html  css  js  c++  java
  • Log4j2

    官方文档:http://logging.apache.org/log4j/2.x/index.html

    1 概述

    Log4j2的配置包含四种方式,其中3种都是在程序中直接调用Log4j2的方法进行配置的,此处不作讲解,文档可见Extending Log4j 2Programmatic Log4j Configuration还有一种是我们最常用的用文件进行配置,可以是XML、JSON、YAML、properties format

    这里我们用XML为例来详细介绍。

    2 默认配置

    随着log4j2的start,log4j2会自动定位classpath下的log4j2.xml,若配置文件不存在,则取默认配置。

    默认配置:

    • A ConsoleAppender attached to the root logger.
    • A PatternLayout set to the pattern "%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" attached to the ConsoleAppend

    若将默认配置改写为log4j2.xml,如下

        <?xml version="1.0" encoding="UTF-8"?>
        <Configuration status="WARN">
          <Appenders>
            <Console name="Console" target="SYSTEM_OUT">
              <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
            </Console>
          </Appenders>
          <Loggers>
            <Root level="error">
              <AppenderRef ref="Console"/>
            </Root>
          </Loggers>
        </Configuration>

    3 日志级别

    Log4j2把日志打印分为6个级别,级别由低到高分别为trace < debug <info < warn < error < fatal,介绍如下:

    • trace:是追踪,就是程序推进以下,你就可以写个trace输出,所以trace应该会特别多,不过没关系,我们可以设置最低日志级别不让他输出。

    • debug:调试,一般用作最低级别,trace压根不用。

    • info:输出一下你感兴趣的或者重要的信息,这个用的最多了。

    • warn:有些信息不是错误信息,但是也要给程序员的一些提示,类似于eclipse中代码的验证不是有error和warn(不算错误但是也请注意,比如以下depressed的方法)。

    • error:错误信息。用的也比较多。

    • fatal:级别比较高了。重大错误,这种级别你可以直接停止程序了,是不应该出现的错误么!不用那么紧张,其实就是一个程度的问题。

    规则说明:若root的级别为error,即 <Root level="error"> ,则仅允许error与fatal可以输出,其他级别信息无法输出。

    4 可加性(Additivity

    4.1 Additivity(待完善)

    简单描述,当name1的logger输出时,此时若包含name2的输出,且name2的additivity为false,则name2的信息无法输出。

    4.2 隔离输出

    当我们需要某个包、某个类、某个名字下指定输出级别时,仅需在<Loggers></Loggers>节点中定义对应的日志记录器logger,logger用于记录范围。

    <Loggers>
        <Logger name="包名|包名+类名|名称" level="trace">
            <AppenderRef ref="Console"/>
      </Logger>
        <Root level="error">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>

    5 Appender

    用于定义输出方式,如下:

    • 控制台
    • 文件(固定周期,每天使用一个日志文件记录;固定大小,超过指定大小则记录到一个新日志文件中)
    • 数据库
    • 远程日志接口程序

    6.Configuration 属性

    6.1 monitorInterval,自动重新加载配置(Automatic Reconfiguration)

    Log4j2支持动态调整配置,自动识别加载,减少了线上系统重启的代价。设置monitorInterval,单位秒,最小5秒,如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration monitorInterval="30">
    ...
    </Configuration>

    6.2 status

    设置为debug,用户可以在eclipse的控制台中看到log4j2启动与加载配置文件时的打印信息,如

    2016-10-31 16:53:28,540 DEBUG Starting configuration XmlConfiguration[location=D:worksourcelog4j2-studywebWEB-INFclasseslog4j2.xml]
    2016-10-31 16:53:28,541 DEBUG PluginManager 'Core' found 69 plugins
    2016-10-31 16:53:28,541 DEBUG PluginManager 'Level' found 0 plugins
    2016-10-31 16:53:28,544 DEBUG PluginManager 'Lookup' found 10 plugins
    2016-10-31 16:53:28,546 DEBUG Building Plugin[name=layout, class=org.apache.logging.log4j.core.layout.PatternLayout]. Searching for builder factory method...
    2016-10-31 16:53:28,550 DEBUG Found builder factory method [newBuilder]: public static org.apache.logging.log4j.core.layout.PatternLayout$Builder org.apache.logging.log4j.core.layout.PatternLayout.newBuilder().
    2016-10-31 16:53:28,565 DEBUG TypeConverterRegistry initializing.
    2016-10-31 16:53:28,565 DEBUG PluginManager 'TypeConverter' found 21 plugins
    2016-10-31 16:53:28,582 DEBUG Calling build() on class class org.apache.logging.log4j.core.layout.PatternLayout$Builder for element PatternLayout with params(name="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n", Configuration(D:worksourcelog4j2-studywebWEB-INFclasseslog4j2.xml), null, name="null", name="null", name="null", name="null", name="null")
    2016-10-31 16:53:28,582 DEBUG PluginManager 'Converter' found 33 plugins
    2016-10-31 16:53:28,583 DEBUG Built Plugin[name=layout] OK from builder factory method.
    2016-10-31 16:53:28,584 DEBUG Building Plugin[name=appender, class=org.apache.logging.log4j.core.appender.ConsoleAppender]. Searching for builder factory method...
    2016-10-31 16:53:28,586 DEBUG Not in a ServletContext environment, thus not loading WebLookup plugin.
    2016-10-31 16:53:28,586 DEBUG PluginManager 'Converter' found 33 plugins
    2016-10-31 16:53:28,588 DEBUG Jansi is not installed, cannot find org.fusesource.jansi.WindowsAnsiOutputStream
    2016-10-31 16:53:28,588 DEBUG Found builder factory method [newBuilder]: public static org.apache.logging.log4j.core.appender.ConsoleAppender$Builder org.apache.logging.log4j.core.appender.ConsoleAppender.newBuilder().
    2016-10-31 16:53:28,594 DEBUG No PluginVisitorStrategy found on annotation [interface org.apache.logging.log4j.core.config.plugins.validation.constraints.Required]. Ignoring.
    2016-10-31 16:53:28,595 DEBUG Encountered type [org.apache.logging.log4j.core.layout.PatternLayout] which can only be checked for null.
    2016-10-31 16:53:28,597 DEBUG No PluginVisitorStrategy found on annotation [interface org.apache.logging.log4j.core.config.plugins.validation.constraints.Required]. Ignoring.
    2016-10-31 16:53:28,598 DEBUG Encountered type [org.apache.logging.log4j.core.appender.ConsoleAppender$Target] which can only be checked for null.
    2016-10-31 16:53:28,598 DEBUG No PluginVisitorStrategy found on annotation [interface org.apache.logging.log4j.core.config.plugins.validation.constraints.Required]. Ignoring.
    2016-10-31 16:53:28,599 DEBUG Calling build() on class class org.apache.logging.log4j.core.appender.ConsoleAppender$Builder for element Console with params(PatternLayout(%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n), null, name="SYSTEM_OUT", name="Console", name="null", name="null")
    2016-10-31 16:53:28,600 DEBUG Jansi is not installed, cannot find org.fusesource.jansi.WindowsAnsiOutputStream
    2016-10-31 16:53:28,601 DEBUG Built Plugin[name=appender] OK from builder factory method.
    2016-10-31 16:53:28,601 DEBUG Building Plugin[name=appenders, class=org.apache.logging.log4j.core.config.AppendersPlugin]. Searching for builder factory method...
    2016-10-31 16:53:28,604 DEBUG No builder factory method found in class org.apache.logging.log4j.core.config.AppendersPlugin. Going to try finding a factory method instead.
    2016-10-31 16:53:28,604 DEBUG Still building Plugin[name=appenders, class=org.apache.logging.log4j.core.config.AppendersPlugin]. Searching for factory method...
    2016-10-31 16:53:28,605 DEBUG Found factory method [createAppenders]: public static java.util.concurrent.ConcurrentMap org.apache.logging.log4j.core.config.AppendersPlugin.createAppenders(org.apache.logging.log4j.core.Appender[]).
    2016-10-31 16:53:28,605 DEBUG Calling createAppenders on class org.apache.logging.log4j.core.config.AppendersPlugin for element Appenders with params(={Console})
    2016-10-31 16:53:28,606 DEBUG Built Plugin[name=appenders] OK from factory method.
    2016-10-31 16:53:28,606 DEBUG Building Plugin[name=logger, class=org.apache.logging.log4j.core.config.LoggerConfig]. Searching for builder factory method...
    2016-10-31 16:53:28,607 DEBUG No builder factory method found in class org.apache.logging.log4j.core.config.LoggerConfig. Going to try finding a factory method instead.
    2016-10-31 16:53:28,607 DEBUG Still building Plugin[name=logger, class=org.apache.logging.log4j.core.config.LoggerConfig]. Searching for factory method...
    2016-10-31 16:53:28,608 DEBUG Found factory method [createLogger]: public static org.apache.logging.log4j.core.config.LoggerConfig org.apache.logging.log4j.core.config.LoggerConfig.createLogger(java.lang.String,org.apache.logging.log4j.Level,java.lang.String,java.lang.String,org.apache.logging.log4j.core.config.AppenderRef[],org.apache.logging.log4j.core.config.Property[],org.apache.logging.log4j.core.config.Configuration,org.apache.logging.log4j.core.Filter).
    2016-10-31 16:53:28,617 DEBUG Calling createLogger on class org.apache.logging.log4j.core.config.LoggerConfig for element Logger with params(name="null", name="DEBUG", name="ted.log4j2.study.demo", name="null", ={}, ={}, Configuration(D:worksourcelog4j2-studywebWEB-INFclasseslog4j2.xml), null)
    2016-10-31 16:53:28,619 DEBUG Built Plugin[name=logger] OK from factory method.
    2016-10-31 16:53:28,619 DEBUG Building Plugin[name=logger, class=org.apache.logging.log4j.core.config.LoggerConfig]. Searching for builder factory method...
    2016-10-31 16:53:28,620 DEBUG No builder factory method found in class org.apache.logging.log4j.core.config.LoggerConfig. Going to try finding a factory method instead.
    2016-10-31 16:53:28,620 DEBUG Still building Plugin[name=logger, class=org.apache.logging.log4j.core.config.LoggerConfig]. Searching for factory method...
    2016-10-31 16:53:28,621 DEBUG Found factory method [createLogger]: public static org.apache.logging.log4j.core.config.LoggerConfig org.apache.logging.log4j.core.config.LoggerConfig.createLogger(java.lang.String,org.apache.logging.log4j.Level,java.lang.String,java.lang.String,org.apache.logging.log4j.core.config.AppenderRef[],org.apache.logging.log4j.core.config.Property[],org.apache.logging.log4j.core.config.Configuration,org.apache.logging.log4j.core.Filter).
    2016-10-31 16:53:28,622 DEBUG Calling createLogger on class org.apache.logging.log4j.core.config.LoggerConfig for element Logger with params(name="null", name="INFO", name="test", name="null", ={}, ={}, Configuration(D:worksourcelog4j2-studywebWEB-INFclasseslog4j2.xml), null)
    2016-10-31 16:53:28,622 DEBUG Built Plugin[name=logger] OK from factory method.
    2016-10-31 16:53:28,622 DEBUG Building Plugin[name=AppenderRef, class=org.apache.logging.log4j.core.config.AppenderRef]. Searching for builder factory method...
    2016-10-31 16:53:28,623 DEBUG No builder factory method found in class org.apache.logging.log4j.core.config.AppenderRef. Going to try finding a factory method instead.
    2016-10-31 16:53:28,623 DEBUG Still building Plugin[name=AppenderRef, class=org.apache.logging.log4j.core.config.AppenderRef]. Searching for factory method...
    2016-10-31 16:53:28,624 DEBUG Found factory method [createAppenderRef]: public static org.apache.logging.log4j.core.config.AppenderRef org.apache.logging.log4j.core.config.AppenderRef.createAppenderRef(java.lang.String,org.apache.logging.log4j.Level,org.apache.logging.log4j.core.Filter).
    2016-10-31 16:53:28,624 DEBUG Calling createAppenderRef on class org.apache.logging.log4j.core.config.AppenderRef for element AppenderRef with params(name="Console", name="null", null)
    2016-10-31 16:53:28,625 DEBUG Built Plugin[name=AppenderRef] OK from factory method.
    2016-10-31 16:53:28,625 DEBUG Building Plugin[name=root, class=org.apache.logging.log4j.core.config.LoggerConfig$RootLogger]. Searching for builder factory method...
    2016-10-31 16:53:28,626 DEBUG No builder factory method found in class org.apache.logging.log4j.core.config.LoggerConfig$RootLogger. Going to try finding a factory method instead.
    2016-10-31 16:53:28,626 DEBUG Still building Plugin[name=root, class=org.apache.logging.log4j.core.config.LoggerConfig$RootLogger]. Searching for factory method...
    2016-10-31 16:53:28,626 DEBUG Found factory method [createLogger]: public static org.apache.logging.log4j.core.config.LoggerConfig org.apache.logging.log4j.core.config.LoggerConfig$RootLogger.createLogger(java.lang.String,org.apache.logging.log4j.Level,java.lang.String,org.apache.logging.log4j.core.config.AppenderRef[],org.apache.logging.log4j.core.config.Property[],org.apache.logging.log4j.core.config.Configuration,org.apache.logging.log4j.core.Filter).
    2016-10-31 16:53:28,628 DEBUG Calling createLogger on class org.apache.logging.log4j.core.config.LoggerConfig$RootLogger for element Root with params(name="null", name="ERROR", name="null", ={Console}, ={}, Configuration(D:worksourcelog4j2-studywebWEB-INFclasseslog4j2.xml), null)
    2016-10-31 16:53:28,629 DEBUG Built Plugin[name=root] OK from factory method.
    2016-10-31 16:53:28,629 DEBUG Building Plugin[name=loggers, class=org.apache.logging.log4j.core.config.LoggersPlugin]. Searching for builder factory method...
    2016-10-31 16:53:28,630 DEBUG No builder factory method found in class org.apache.logging.log4j.core.config.LoggersPlugin. Going to try finding a factory method instead.
    2016-10-31 16:53:28,630 DEBUG Still building Plugin[name=loggers, class=org.apache.logging.log4j.core.config.LoggersPlugin]. Searching for factory method...
    2016-10-31 16:53:28,631 DEBUG Found factory method [createLoggers]: public static org.apache.logging.log4j.core.config.Loggers org.apache.logging.log4j.core.config.LoggersPlugin.createLoggers(org.apache.logging.log4j.core.config.LoggerConfig[]).
    2016-10-31 16:53:28,631 DEBUG Calling createLoggers on class org.apache.logging.log4j.core.config.LoggersPlugin for element Loggers with params(={ted.log4j2.study.demo, test, root})
    2016-10-31 16:53:28,632 DEBUG Built Plugin[name=loggers] OK from factory method.
    2016-10-31 16:53:28,633 DEBUG Started configuration XmlConfiguration[location=D:worksourcelog4j2-studywebWEB-INFclasseslog4j2.xml] OK.
    2016-10-31 16:53:28,634 DEBUG Stopped org.apache.logging.log4j.core.config.DefaultConfiguration@72314fd4 OK
    2016-10-31 16:53:28,705 DEBUG Registering MBean org.apache.logging.log4j2:type=150838093
    2016-10-31 16:53:28,708 DEBUG Registering MBean org.apache.logging.log4j2:type=150838093,component=StatusLogger
    2016-10-31 16:53:28,710 DEBUG Registering MBean org.apache.logging.log4j2:type=150838093,component=ContextSelector
    2016-10-31 16:53:28,712 DEBUG Registering MBean org.apache.logging.log4j2:type=150838093,component=Loggers,name=test
    2016-10-31 16:53:28,713 DEBUG Registering MBean org.apache.logging.log4j2:type=150838093,component=Loggers,name=
    2016-10-31 16:53:28,714 DEBUG Registering MBean org.apache.logging.log4j2:type=150838093,component=Loggers,name=ted.log4j2.study.demo
    2016-10-31 16:53:28,715 DEBUG Registering MBean org.apache.logging.log4j2:type=150838093,component=Appenders,name=Console
    2016-10-31 16:53:28,715 DEBUG Reconfiguration complete for context[name=150838093] at null (org.apache.logging.log4j.core.LoggerContext@60b964af) with optional ClassLoader: null
    2016-10-31 16:53:28,716 DEBUG Shutdown hook enabled. Registering a new one.
    2016-10-31 16:53:28,718 DEBUG LoggerContext[name=150838093, org.apache.logging.log4j.core.LoggerContext@60b964af] started OK.
    2016-10-31 16:53:28,726 DEBUG Using default SystemClock for timestamps
    16:53:28.734 [main] ERROR ted.log4j2.study.demo.DemoTest - error
    16:53:28.735 [main] DEBUG ted.log4j2.study.demo.DemoTest - debug
    16:53:28.735 [main] WARN  ted.log4j2.study.demo.DemoTest - warn
    16:53:28.735 [main] INFO  ted.log4j2.study.demo.DemoTest - info
    2016-10-31 16:53:28,739 DEBUG Stopping LoggerContext[name=150838093, org.apache.logging.log4j.core.LoggerContext@60b964af]
    2016-10-31 16:53:28,739 DEBUG Stopping LoggerContext[name=150838093, org.apache.logging.log4j.core.LoggerContext@60b964af]...
    2016-10-31 16:53:28,740 DEBUG Unregistering MBean org.apache.logging.log4j2:type=150838093
    2016-10-31 16:53:28,740 DEBUG Unregistering MBean org.apache.logging.log4j2:type=150838093,component=StatusLogger
    2016-10-31 16:53:28,740 DEBUG Unregistering MBean org.apache.logging.log4j2:type=150838093,component=ContextSelector
    2016-10-31 16:53:28,741 DEBUG Unregistering MBean org.apache.logging.log4j2:type=150838093,component=Loggers,name=ted.log4j2.study.demo
    2016-10-31 16:53:28,741 DEBUG Unregistering MBean org.apache.logging.log4j2:type=150838093,component=Loggers,name=test
    2016-10-31 16:53:28,741 DEBUG Unregistering MBean org.apache.logging.log4j2:type=150838093,component=Loggers,name=
    2016-10-31 16:53:28,743 DEBUG Unregistering MBean org.apache.logging.log4j2:type=150838093,component=Appenders,name=Console
    2016-10-31 16:53:28,745 DEBUG Stopped XmlConfiguration[location=D:worksourcelog4j2-studywebWEB-INFclasseslog4j2.xml] OK
    2016-10-31 16:53:28,745 DEBUG Stopped LoggerContext[name=150838093, org.apache.logging.log4j.core.LoggerContext@60b964af]...
    View Code

    7.配置日志输出格式(Pattern

    • %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy-MM-dd HH:mm:ss},输出类似:2006-01-18 17:50:22'
    • %t 产生该日志事件的线程名
    • %p 日志的log_level,如DEBUGWARN或者INFO
    • %c 输出所属的类目,通常就是所在类的全名,如“com.mlq.love”
    • %m 日志的内容,同%msg
    • %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。如Wite2Database.main(Wite2Database.java:18)
    • %n 输出一个回车换行符
    • %M 方法名称
    • %xEx The same as the %throwable conversion word but also includes class packaging information.

    8 属性替换(PropertySubstitution

     如: $${date:yyyy-MM}

  • 相关阅读:
    JDK线程池原理之一:工作原理
    Hystrix Feign 特定状态码不熔断
    Hystrix熔断的方法级别(自定义commonKey)
    谨慎使用Exception
    FunctionalInterface~一个批量处理数据的类
    keycloak~账号密码认证和授权码认证
    keycloak~OIDC&OAuth2&自定义皮肤
    docker~添加hosts绑定的方法
    docker~产生的IP段与现有IP冲突问题
    高中数学知识要点及解题方法精粹[网摘]
  • 原文地址:https://www.cnblogs.com/kangping/p/6015614.html
Copyright © 2011-2022 走看看