log4j2

1 日志级别

    日志记录器(Logger)的行为是分等级的。如下表所示

分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是 ERROR>WARN>INFO>DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来,也是说大于等于的级别的日志才输出。

2 log4j2文件的配置大致结构

    log4j2.xml文件的配置大致如下:

Configuration

    properties

    Appenders

        Console

            PatternLayout

        File

        RollingRandomAccessFile   

            Filters(过滤机制)

            PatternLayout(控制日志信息输出格式)

            Polices(控制日志何时when滚动)

            Strategy(控制日志如何how滚动)

    Loggers

        AsyncLogger(异步日志器)

            AppenderRef

        Logger(同步日志器)

            AppenderRef

        RootLogger

            AppenderRef

    2.1 Configuration

Configuration:为根节点,有status和monitorInterval等多个属性

* status的值有 “trace”, “debug”, “info”, “warn”, “error” and “fatal”,用于控制log4j2日志框架本身的日志级别,如果将stratus设置为较低的级别就会看到很多关于log4j2本身的日志,如加载log4j2配置文件的路径等信息

* monitorInterval,含义是每隔多少秒重新读取配置文件,可以不重启应用的情况下修改配置

    2.2 Appenders: 输出源,用于定义日志输出的地方,log4j2支持的输出源有很多,有控制台Console、文件File、MongoDB、Flume、RollingRandomAccessFile等。

1. Console: 控制台输出源是将日志打印到控制台上,开发的时候一般都会配置,用于调试;

2. File:文件输出源,用于将日志写入到指定的文件,需要配置输入到哪个位置(如/data/applogs);

3. RollingRandomAccessFile: 该输出源也是写入到文件,不同的是不同的是比File更加强大,可以指定当文件达到一定大小(如20MB)时,另起一个文件继续写入日志,另起一个文件就涉及到新文件的名字命名规则,因此需要配置文件命名规则。这种方式更加实用,因为你不可能一直往一个文件中写,如果一直写,文件过大,打开就会卡死,也不便于查找日志。

* name: 日志器名

* fileName: 指定当前日志文件的位置和名称;

* filePattern: 指定当发生Rolling时,文件的转移和重命名规则

* SizeBasedTriggeringPolicy: 指定当文件体积大于size指定的值时,触发Rolling,生成一个新的日志文件;

* DefaultRolloverStrategy: 指定最多保存的文件个数,默认是9;

* TimeBasedTriggeringPolicy: 与filePattern结合使用,比如filePattern="${LOG_HOME}/apibiz_%d{yyyyMMdd}.log”、TimeBasedTriggeringPolicy的interval=1,则表示每天生成一个文件,若filePattern改成{yyyyMMddHHmm},则每分钟生成一个文件;

   

  2.4 Filters:可以配置一系列的过滤器

    Log4j2的onMatch和onMismatch属性值详解如下:                                     

    onMatch和onMismatch都有三个属性值,分别为Accept、DENY和NEUTRAL;                                       

    分别介绍这两个配置项的三个属性值:                      -               

    --------------------                           

    onMatch="ACCEPT" 表示匹配该级别及以上     

    onMatch="DENY" 表示不匹配该级别及以上         

    onMatch="NEUTRAL" 表示该级别及以上的,由下一个filter处理,如果当前是最后一个,则表示匹配该级别及以上

    onMismatch="ACCEPT" 表示匹配该级别以下   

    onMismatch="NEUTRAL" 表示该级别及以下的,由下一个filter处理,如果当前是最后一个,则不匹配该级别以下的

    onMismatch="DENY" 表示不匹配该级别以下的              -           

    --------------------

  2.5 PatternLayout

* charset ##指定字符集 

* pattern ##指定格式

* alwaysWriteExceptions ##默认为true,输出异常

* header ##可选项。包含在每个日志文件的顶部

* footer ##可选项。包含在每个日志文件的尾部。

       

  2.5.1 pattern属性参数格式描述

######### 常见参数 #########

%c{参数} 或 %logger{参数}  ##输出日志名称

%C{参数} 或 %class{参数    ##输出类型

%d{参数}{时区te{参数}{时区} ##输出时间

%F|%file                  ##输出文件名

highlight{pattern}{style} ##高亮显示

%l  ##输出错误的完整位置

%L  ##输出错误行号

%m 或 %msg 或 %message ##输出错误信息

%M 或 %method ##输出方法名

%n            ##输出换行符

%level{参数1}{参数2}{参数3} ##输出日志的级别

%t 或 %thread              ##创建logging事件的线程名

*/

######### 特殊符号 ############

#有些特殊符号不能直接打印,需要使用实体名称或者编号

//

& —— & 或者 &

< —— <  或者 <

> —— >  或者 >

“ —— " 或者 "

‘ —— ' 或者 '

*/

######## pattern对齐修饰 ##########

// 对齐修饰,可以指定信息的输出格式,如是否左对齐,是否留空格等。

## 编写格式为在任何pattern和%之间加入一个小数,可以是正数,也可以是负数。

## 整数表示右对齐,负数表示左对齐;

## 整数位表示输出信息的最小n个字符,如果输出信息不够n个字符,将用空格补齐;

## 小数位表示输出信息的最大字符数,如果超过n个字符,则只保留最后n个字符的信息

## (注意:保留的是后20个字符,而不是前20个字符)

*/

#示例如下

%20 —— 右对齐,不足20个字符则在信息前面用空格补足,超过20个字符则保留原信息

%-20 —— 左对齐,不足20个字符则在信息后面用空格补足,超过20个字符则保留原信息

%.30 —— 如果信息超过30个字符,则只保留最后30个字符

%20.30 —— 右对齐,不足20个字符则在信息前面用空格补足,超过30个字符则只保留最后30个字符

%-20.30 —— 左对齐,不足20个字符则在信息后面用空格补足,超过30个字符则只保留最后30个字符

   

    2.6 Loggers:日志器,分为跟日志器Root和自定义日志器自定义时需要指定每个Logger的名称name(对于命名可以以包名作为日志的名字,不同的包配置不同的级别等),日志级别level,相加性additivity(是否继承下面配置的日志器), 对于一般的日志器(如Console、File、RollingRandomAccessFile)一般需要配置一个或多个输出源AppenderRef; 每个logger可以指定一个level(TRACE, DEBUG, INFO, WARN, ERROR, ALL or OFF),不指定时level默认为ERROR

additivity指定是否同时输出log到父类的appender,缺省为true。

log4j.xml配置样例

 

     

      [search-mobile-web]%d %-5p [%c] %m%n

     

      /data/applogs/search-mobile-web/

 

 

     

     

            name="rootAppender"

            fileName="${LOG_HOME}/root.log"

            filePattern="${LOG_HOME}/root_%d{yyyyMMdd}.log">

       

       

           

       

     

     

     

            name="apiBizAppender"

            fileName="${LOG_HOME}/apibiz.log"

          filePattern="${LOG_HOME}/apibiz_%d{yyyyMMdd}.log”>

       

           

           

       

       

       

           

       

     

     

            name="apiSysAppender"

            fileName="${LOG_HOME}/apisys.log"

            filePattern="${LOG_HOME}/apisys_%d{yyyyMMdd}.log">

       

           

           

       

       

       

           

       

     

     

            name="apiErrAppender"

            fileName="${LOG_HOME}/syserror.log"

            filePattern="${LOG_HOME}/syserror_%d{yyyyMMdd}.log">

       

           

       

       

       

           

       

     

     

            name="apiQueryAppender"

            fileName="${LOG_HOME}/query.log"

            filePattern="${LOG_HOME}/query_%d{yyyyMMdd}.log">

       

           

           

       

       

       

           

       

     

     

            name="serviceQueryAppender"

            fileName="${LOG_HOME}/servicelogs/query.log"

            filePattern="${LOG_HOME}/servicelogs/query.log_%d{yyyyMMdd}.log”>

       

       

           

           

       

       

       

           

       

     

     

            name="serviceErrorAppender"

            fileName="${LOG_HOME}/servicelogs/error.log"

            filePattern="${LOG_HOME}/servicelogs/error.log_%d{yyyyMMdd}.log">

       

           

       

       

       

           

       

     

 

 

     

       

     

     

       

     

     

       

     

     

       

     

     

       

     

     

       

     

     

       

     

 

//按如上配置生产的日志格式样例

相关jar包配置样例

    org.apache.logging.log4j

    log4j-api

    ${log4j2.version}

    org.apache.logging.log4j

    log4j-core

    ${log4j2.version}

    org.apache.logging.log4j

    log4j-slf4j-impl

    ${log4j2.version}

    org.apache.logging.log4j

    log4j-web

    ${log4j2.version}

    org.slf4j

    slf4j-api

    ${slf4j-api.version}

    com.lmax

    disruptor

    3.4.1

你可能感兴趣的:(log4j2)