• 7.log4j2的使用


    一.简介

    log4j2相对于log4j 1.x有了脱胎换骨的变化,其官网宣称的优势有多线程下10几倍于log4j 1.x和logback的高吞吐量、可配置的审计型日志、基于插件架构的各种灵活配置等。如果已经掌握log4j 1.x,使用log4j2还是非常简单的。

    二.maven依赖

    <dependency>
     <groupId>org.apache.logging.log4j</groupId>
     <artifactId>log4j-core</artifactId>
     <version>2.8.2</version>
    </dependency>
    <dependency>
     <groupId>org.apache.logging.log4j</groupId>
     <artifactId>log4j-api</artifactId>
     <version>2.8.2</version>
    </dependency>

    三.基本信息

    1.关于配置文件的名称以及在项目中的存放位置

        log4j 2.x版本不再支持像1.x中的.properties后缀的文件配置方式,2.x版本配置文件后缀名只能为".xml",".json"或者".jsn".

        系统选择配置文件的优先级(从先到后)如下:

          (1).classpath下的名为log4j2-test.json 或者log4j2-test.jsn的文件.

          (2).classpath下的名为log4j2-test.xml的文件.

          (3).classpath下名为log4j2.json 或者log4j2.jsn的文件.

          (4).classpath下名为log4j2.xml的文件.

         我们一般默认使用log4j2.xml进行命名。如果本地要测试,可以把log4j2-test.xml放到classpath,而正式环境使用log4j2.xml,则在打包部署的时候不要打包log4j2-test.xml即可。

    2.缺省默认配置文件

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

    3.配置文件节点解析

    (1).根节点Configuration有两个属性:status和monitorinterval,有两个子节点:Appenders和Loggers(表明可以定义多个Appender和Logger).

     status用来指定log4j本身的打印日志的级别.

     monitorinterval用于指定log4j自动重新配置的监测间隔时间,单位是s,最小是5s.

    (2).Appenders节点,常见的有三种子节点: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属性)。

     (3).Loggers节点,常见的有两种:Root和Logger.

     Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出

     level:日志输出级别,共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF.

     AppenderRef:Root的子节点,用来指定该日志输出到哪个Appender.

     Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。

     level:日志输出级别,共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF.

     name:用来指定该Logger所适用的类或者类所在的包全路径,继承自Root节点.

     AppenderRef:Logger的子节点,用来指定该日志输出到哪个Appender,如果没有指定,就会默认继承自Root.如果指定了,那么会在指定的这个Appender和Root的Appender中都   会输出,此时我们可以设置Logger的additivity="false"只在自定义的Appender中进行输出。

     (4).关于日志level.

      共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF.

      All:最低等级的,用于打开所有日志记录.

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

      Debug:指出细粒度信息事件对调试应用程序是非常有帮助的.

      Info:消息在粗粒度级别上突出强调应用程序的运行过程.

      Warn:输出警告及warn以下级别的日志.

      Error:输出错误信息日志.

      Fatal:输出每个严重的错误事件将会导致应用程序的退出的日志.

      OFF:最高等级的,用于关闭所有日志记录.

      程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少

     四.比较完整的log4j2.xml配置模板  

    1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
     3 <!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
     4 <!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
     5 <configuration status="WARN" monitorInterval="30">
     6     <!--先定义所有的appender-->
     7     <appenders>
     8     <!--这个输出控制台的配置-->
     9         <console name="Console" target="SYSTEM_OUT">
    10         <!--输出日志的格式-->
    11             <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
    12         </console>
    13     <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用-->
    14     <File name="log" fileName="log/test.log" append="false">
    15        <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
    16     </File>
    17     <!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
    18         <RollingFile name="RollingFileInfo" fileName="${sys:user.home}/logs/info.log"
    19                      filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
    20             <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->        
    21             <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
    22             <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
    23             <Policies>
    24                 <TimeBasedTriggeringPolicy/>
    25                 <SizeBasedTriggeringPolicy size="100 MB"/>
    26             </Policies>
    27         </RollingFile>
    28         <RollingFile name="RollingFileWarn" fileName="${sys:user.home}/logs/warn.log"
    29                      filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
    30             <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
    31             <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
    32             <Policies>
    33                 <TimeBasedTriggeringPolicy/>
    34                 <SizeBasedTriggeringPolicy size="100 MB"/>
    35             </Policies>
    36         <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
    37             <DefaultRolloverStrategy max="20"/>
    38         </RollingFile>
    39         <RollingFile name="RollingFileError" fileName="${sys:user.home}/logs/error.log"
    40                      filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
    41             <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
    42             <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
    43             <Policies>
    44                 <TimeBasedTriggeringPolicy/>
    45                 <SizeBasedTriggeringPolicy size="100 MB"/>
    46             </Policies>
    47         </RollingFile>
    48     </appenders>
    49     <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
    50     <loggers>
    51         <!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
    52         <logger name="org.springframework" level="INFO"></logger>
    53         <logger name="org.mybatis" level="INFO"></logger>
    54         <root level="all">
    55             <appender-ref ref="Console"/>
    56             <appender-ref ref="RollingFileInfo"/>
    57             <appender-ref ref="RollingFileWarn"/>
    58             <appender-ref ref="RollingFileError"/>
    59         </root>
    60     </loggers>
    61 </configuration>

      五.日志调用

    package com.my.study;
    
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    
    public class UseLog4j2 {
        
    private static Logger logger = LogManager.getLogger(UseLog4j2.class);
        public static void main(String[] args) {
            // TODO Auto-generated method stub        
            logger.info("33333");
        }
    
    }

    六.配置详解

    Log4j2的日志配置文件,log4j2.xml文件的配置(实现控制台输出,各级别分别文件输出,自动压缩等)

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/2002/xmlspec/dtd/2.10/xmlspec.dtd">
    
    <!-- status : 这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,会看到log4j2内部各种详细输出 monitorInterval 
        : Log4j能够自动检测修改配置文件和重新配置本身, 设置间隔秒数。 注:本配置文件的目标是将不同级别的日志输出到不同文件,最大2MB一个文件, 
        文件数据达到最大值时,旧数据会被压缩并放进指定文件夹 -->
    <Configuration status="WARN" monitorInterval="600">
    
        <Properties> <!-- 配置日志文件输出目录,此配置将日志输出到tomcat根目录下的指定文件夹 -->
            <Property name="LOG_HOME">${sys:catalina.home}/WebAppLogs/HHServices
            </Property>
        </Properties>
    
        <Appenders>
    
            <!-- 优先级从高到低分别是 OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL -->
            <!-- 单词解释: Match:匹配 DENY:拒绝 Mismatch:不匹配 ACCEPT:接受 -->
            <!-- DENY,日志将立即被抛弃不再经过其他过滤器; NEUTRAL,有序列表里的下个过滤器过接着处理日志; ACCEPT,日志会被立即处理,不再经过剩余过滤器。 -->
            <!--输出日志的格式
             %d{yyyy-MM-dd HH:mm:ss, SSS} : 日志生产时间
             %p : 日志输出格式
             %c : logger的名称 
             %m : 日志内容,即 logger.info("message") 
             %n : 换行符 
             %C : Java类名
             %L : 日志输出所在行数 
             %M : 日志输出所在方法名 
             hostName : 本地机器名 
             hostAddress : 本地ip地址 -->
    
            <!--这个输出控制台的配置,这里输出除了warn和error级别的信息到System.out -->
            <Console name="console_out_appender" target="SYSTEM_OUT">
                <!-- 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) . -->
                <ThresholdFilter level="DEBUG" onMatch="ACCEPT"
                    onMismatch="DENY" />
                <!-- 输出日志的格式 -->
                <PatternLayout pattern="%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n" />
            </Console>
            <!-- 这个输出控制台的配置,这里输出error级别的信息到System.err,在eclipse控制台上看到的是红色文字 -->
            <Console name="console_err_appender" target="SYSTEM_ERR">
                <ThresholdFilter level="ERROR" onMatch="ACCEPT"
                    onMismatch="DENY" />
                <PatternLayout pattern="%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n" />
            </Console>
    
    
            <!-- TRACE级别日志 ; 设置日志格式并配置日志压缩格式,压缩文件独立放在一个文件夹内, 日期格式不能为冒号,否则无法生成,因为文件名不允许有冒号,此appender只输出trace级别的数据到trace.log -->
            <RollingFile name="trace_appender" immediateFlush="true"
                fileName="${LOG_HOME}/trace.log" filePattern="${LOG_HOME}/trace/trace - %d{yyyy-MM-dd HH_mm_ss}.log.gz">
                <PatternLayout>
                    <pattern>%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n</pattern>
                </PatternLayout>
                <Policies>
                    <!-- 每个日志文件最大2MB -->
                    <SizeBasedTriggeringPolicy size="2MB" />
    
                </Policies>
                <Filters>
                    <!-- 此Filter意思是,只输出TRACE级别的数据 DENY,日志将立即被抛弃不再经过其他过滤器; NEUTRAL,有序列表里的下个过滤器过接着处理日志; 
                        ACCEPT,日志会被立即处理,不再经过剩余过滤器。 -->
                    <ThresholdFilter level="debug" onMatch="DENY"
                        onMismatch="NEUTRAL" />
                    <ThresholdFilter level="trace" onMatch="ACCEPT"
                        onMismatch="DENY" />
                </Filters>
            </RollingFile>
    
            <!-- DEBUG级别日志 设置日志格式并配置日志压缩格式,压缩文件独立放在一个文件夹内, 日期格式不能为冒号,否则无法生成,因为文件名不允许有冒号,此appender只输出debug级别的数据到debug.log; -->
            <RollingFile name="debug_appender" immediateFlush="true"
                fileName="${LOG_HOME}/debug.log" filePattern="${LOG_HOME}/debug/debug - %d{yyyy-MM-dd HH_mm_ss}.log.gz">
                <PatternLayout>
                    <pattern>%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n</pattern>
                </PatternLayout>
                <Policies><!-- 每个日志文件最大2MB ; -->
                    <SizeBasedTriggeringPolicy size="2MB" />
    
                    <!-- 如果启用此配置,则日志会按文件名生成新压缩文件, 即如果filePattern配置的日期格式为 %d{yyyy-MM-dd HH} 
                        ,则每小时生成一个压缩文件, 如果filePattern配置的日期格式为 %d{yyyy-MM-dd} ,则天生成一个压缩文件 -->
                    <TimeBasedTriggeringPolicy interval="1"
                        modulate="true" />
    
                </Policies>
                <Filters><!-- 此Filter意思是,只输出debug级别的数据 -->
                    <ThresholdFilter level="info" onMatch="DENY"
                        onMismatch="NEUTRAL" />
                    <ThresholdFilter level="debug" onMatch="ACCEPT"
                        onMismatch="DENY" />
                </Filters>
            </RollingFile>
    
            <!-- INFO级别日志 -->
            <RollingFile name="info_appender" immediateFlush="true"
                fileName="${LOG_HOME}/info.log" filePattern="${LOG_HOME}/info/info - %d{yyyy-MM-dd HH_mm_ss}.log.gz">
                <PatternLayout>
                    <pattern>%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n</pattern>
                </PatternLayout>
                <Policies>
                    <SizeBasedTriggeringPolicy size="2MB" />
                </Policies>
                <Filters>
                    <ThresholdFilter level="warn" onMatch="DENY"
                        onMismatch="NEUTRAL" />
                    <ThresholdFilter level="info" onMatch="ACCEPT"
                        onMismatch="DENY" />
                </Filters>
            </RollingFile>
    
            <!-- WARN级别日志 -->
            <RollingFile name="warn_appender" immediateFlush="true"
                fileName="${LOG_HOME}/warn.log" filePattern="${LOG_HOME}/warn/warn - %d{yyyy-MM-dd HH_mm_ss}.log.gz">
                <PatternLayout>
                    <pattern>%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n</pattern>
                </PatternLayout>
                <Policies>
                    <SizeBasedTriggeringPolicy size="2MB" />
                </Policies>
                <Filters>
                    <ThresholdFilter level="error" onMatch="DENY"
                        onMismatch="NEUTRAL" />
                    <ThresholdFilter level="warn" onMatch="ACCEPT"
                        onMismatch="DENY" />
                </Filters>
            </RollingFile>
    
            <!-- ERROR级别日志 -->
            <RollingFile name="error_appender" immediateFlush="true"
                fileName="${LOG_HOME}/error.log" filePattern="${LOG_HOME}/error/error - %d{yyyy-MM-dd HH_mm_ss}.log.gz">
                <PatternLayout>
                    <pattern>%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n</pattern>
                </PatternLayout>
                <Policies>
                    <SizeBasedTriggeringPolicy size="2MB" />
                </Policies>
                <Filters>
                    <ThresholdFilter level="error" onMatch="ACCEPT"
                        onMismatch="DENY" />
                </Filters>
            </RollingFile>
        </Appenders>
    
        <Loggers>
            <!-- 配置日志的根节点 -->
            <!-- 定义logger,只有定义了logger并引入了appender,appender才会生效 -->
            <root level="trace">
                <appender-ref ref="console_out_appender" />
                <appender-ref ref="console_err_appender" />
                <appender-ref ref="trace_appender" />
                <appender-ref ref="debug_appender" />
                <appender-ref ref="info_appender" />
                <appender-ref ref="warn_appender" />
                <appender-ref ref="error_appender" />
            </root>
    
            <!-- 第三方日志系统 -->
            <logger name="org.springframework.core" level="info" />
            <logger name="org.springframework.beans" level="info" />
            <logger name="org.springframework.context" level="info" />
            <logger name="org.springframework.web" level="info" />
            <logger name="org.jboss.netty" level="warn" />
            <logger name="org.apache.http" level="warn" />
    
        </Loggers>
    
    </Configuration>

    七.log4j2<PatternLayout>子节点浅析

    PatternLayout是最重要也是最常用的控制输出内容的节点,包括类名、时间、行号、日志级别、序号等都可以控制,同时还可以指定日志格式,可以使用正则表达式处理输出结果。

    PatternLayout中包含的特殊字符包括 , , ,f,用\输出单斜线,用%%输出%。

    下面是PatternLayout的参数

    Parameter Name

    Type

    Description

    charset

    String

    输出的字符集。如果没有指定,则使用系统默认的字符集输出。

    pattern

    String

     详见后面的pattern的表格

    replace

    RegexReplacement

    替换部分输出中的String。这将会调用一个与RegexReplacement转换器相同的函数,不同的是这是针对整个消息的。

    alwaysWriteExceptions

    boolean

    默认为true。总是输出异常,即使没有定义异常对应的pattern,也会被附在所有pattern的最后。设为false则不会输出异常。

    header

    String

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

    footer

    String

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

    noConsoleNoAnsi

    boolean

    默认为false。如果为true,且System.console()是null,则不会输出ANSI转义码。

    下面RegexReplacement参数

    Parameter Name

    Type

    Description

    regex

    String

    Java正则表达式

    replacement

    String

    任何匹配正则规则,被正则替换的后值

     

    下面是pattern属性具体描述(这个表格仅包括了我能看懂的部分,还有很多看不懂并且试验也不成功的部分我都没写。另外用于控制输出结果颜色的highlight和style我也没有写,实在是感觉平时意义不大):

    参数名

    参数意义

    详细描述

    %c{参数}或%logger{参数}

    输出logger的名称,即语句private static final Logger logger = LogManager.getLogger(App.class.getName())中App.class.getName()的值。也可以使用其他字符串。

    如果不带参数,则输出完整的logger名称;如果参数是整数n(只支持正整数),则先将logger名称依照小数点(.)分割成n段,然后取右侧的n段;如果参数不是整数,则除了最右侧的一段,其他整段字符都用这个字符代替,保留小数点;不管怎么写,最右侧的一段都保持不变。默认不带参数,并输出logger的完整名称。注意:上面的说明写得很烂,但是官方文档写得就这么烂,而且还不完整,看不懂是必然的,还请看官自己多试验,才能有所领会。如果看官自己懒得试验又看不懂,只能建议不要加参数,直接%c输出完整值。

    示例:

    pattern表达式

    logger名称

    结果

    %c{1}

    org.apache.com.te.Foo

    Foo

    %c{2}

    org.apache.com.te.Foo

    te.Foo

    %c{1.}

    org.apache.com.te.Foo

    o.a.c.t.Foo

    %c{1.1.!}

    org.apache.com.te.Foo

    o.a.!.!.Foo

    %c{.}

    org.apache.com.te.Foo

    ….Foo

    %C{参数}或%class{参数}

    输出类名。注意,这个是大写C,上面是小写c。

    参数规则与%c完全一样,请参见上面的说明。

    %d{参数}{时区te{参数}{时区

    输出时间。

    第一个大括号数可以是保留关键字,也可以是text.SimpleDateFormat字符拼接而成。保留关键字有:DEFAULT,ABSOLUTE, COMPACT, DATE, ISO8601, ISO8601_BASIC。

    第二个大括号中的参数是java.util.TimeZone.getTimeZone的值,可以设定时区。

    示例:

    pattern表达式

    输出

    %d{DEFAULT}

    2012-11-02 14:34:02,781

    %d{ISO8601}

    2012-11-02T14:34:02,781

    %d{ISO8601_BASIC}

    20121102T143402,781

    %d{ABSOLUTE}

    14:34:02,781

    %d{DATE}

    02 Nov 2012

    14:34:02,781

    %d{COMPACT}

    20121102143402781

    %d{HH:mm:ss,SSS}

    14:34:02,781

    %d{dd MMM yyyy HH:mm:ss,SSS}

    02 Nov 2012

    14:34:02,781

    %d{HH:mm:ss}{GMT+0}

    18:34:02

    %d{UNIX}

    1351866842

    %d{UNIX_MILLIS}

    1351866842781

    输出特殊字符

    &, <, >, ”, ’全都要使用实体名称或实体编号替代,即

    符号

    实体名称

    实体编号

    &

    &amp;

    &#38;

    &lt;

    &#60;

    &gt;

    &#62;

    &quot;

    &#34;

    &apos;

    &#39;

    官方文档说pattern删除了 和 ,但是经我测试可以使用,明显是官方文档的错误。

    %F|%file

    输出文件名

    仅仅是文件名称,如Test.java,不包含路径名称

    highlight{pattern}{style}

    高亮显示结果

     

    %l

    输出完整的错误位置,如com.future.ourfuture.test.test.App.tt(App.java:13)

    注意1:这个是小写的L。

    注意2:使用该参数会影影响日志输出的性能。

    %L

    输出错误行号,如“13”

    注意:使用该参数会影响日志输出的性能。

    %m或%msg或%message

    输出错误信息,即logger.error(String msg)中的msg

     

    %M或%method

    输出方法名,如“main”,“getMsg”等字符串

     

    %n

    换行符

    根据系统自行决定,如Windows是” ”,Linux是” ”

    %level{参数1}{参数2}{参数3}

    参数1用来替换日志信息的级别,格式为:{level=label, level=label, …},即使用label代替的字符串替换level。其中level为日志的级别,如WARN/DEBUG/ERROR/TRACE/INFO

    参数2表示只保留前n个字符。格式为length=n,n为整型。但参数1中指定了label的字符串不受此参数限制

    参数3表示结果是大写还是小写。参数1指定了label的字符串不受此参数限制。

    示例:

    输入

    输出

    %level{WARN=W, DEBUG=D, ERROR=E, TRACE=T, INFO=I}

    logger.warn输出W, logger.debug输出D,其他依次类推

    %level{ERROR=FSF, length=2, lowerCase=true}

    logger.error会输出FSF,其他均只输出前两个字母,且小写,如wa/de/in/tr

    %level{length=3}

    所有都只输出前3个字符,如WAR/DEB /ERR/TRA/INF

    %r或%relative

    输出自JVM启动以来到log事件开始时的毫秒数

     

    replace{pattern}{regex}{substitution}

    将pattern的输出结果,按照正则表达式regex匹配后,使用substitution字符串替换

    例如:"%replace{%logger }{.}{/}就是将所有%logger中的小数点(.)全部替换为斜杠,如果%logger是com.future.ourfuture.test.test.App则输出为com/future/ourfuture/test/test/App。pattern中可以写多个表达式,如%replace{%logger%msg%C}{.}{/}%n

    %sn或%sequenceNumber

    自增序号,每执行一次log事件,序号+1,是一个static变量。

     

    %t或%thread

    创建logging事件的线程名

     

    %u{RANDOM|TIME}或%uuid{RANDOM|TIME}

    依照一个随机数或当前机器的MAC和时间戳来随机生成一个UUID

     

    下面是pattern的对齐修饰:

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

    编写格式为在任何pattern和%之间加入一个小数,可以是正数,也可以是负数。如%10.20c表示对logger的信息进行处理。%-10.20m表示对message进行处理。

    整数表示右对齐,负数表示左对齐;整数位表示输出信息的最小10个字符,如果输出信息不够10个字符,将用空格补齐;小数位表示输出信息的最大字符数,如果超过20个字符,则只保留最后20个字符的信息(注意:保留的是后20个字符,而不是前20个字符)。

    下面是一些示例。

    格式

    是否左对齐

    最小宽度

    最大宽度

    说明

    %20

    右对齐

    20

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

    %-20

    左对齐

    20

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

    %.30

    不对齐

    30

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

    %20.30

    右对齐

    20

    30

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

    %-20.30

    左对齐

    20

    30

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


    参考资料:http://www.cnblogs.com/hafiz/p/6170702.html
  • 相关阅读:
    《免费:商业的未来》书摘
    wxWidgets的安装编译、相关配置、问题分析处理
    CodeBlocks的下载安装、配置、简单编程
    【最新】让快捷方式 实现相对路径——非.bat方式实现
    跨平台C/C++集成开发环境-Code::Blocks-内置GCC
    IOS自定义alertview
    IOS快速开发之常量定义
    为UITableViewController瘦身
    IOS中扩展机制Category和associative
    IOS制作一个漂亮的登录界面
  • 原文地址:https://www.cnblogs.com/lukelook/p/9176911.html
Copyright © 2020-2023  润新知