log4j2 配置文件详解 (xml版)

  |   0 评论   |   407 浏览

这两天因为着手写了一个小项目,想加点日志输出。于是乎就想到了log4j,然后就到官网上去看了一波。发现log4j版本已经升级到2.X了,以前学的是1.X。所以只能从网上找资料,历经几个小时,终于找到一份完整的,然后写出我自己的理解。官方配置文件地址

log4j在基础java项目上仅需要以下两个包
imagepng

一、log4j2默认配置文件(xml)

<?xml version="1.0" encoding="UTF-8"?>
<!-- OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL log4j2日志等级 -->
<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>

二、log4j2配置文件节点详解

<Configuration>:配置文件根节点,有Appenders,Loggers两个子节点

status:用来指定log4j2自身的打印日志的级别.默认是OFF
monitorinterval:用来指定log4j2自动读取配置的间隔时间,单位是s,最小是5s.

<Appenders>:所有日志输出的目的地,s表明可以有多个输出点。

<Console>:用来定义输出到控制台的标签

name:指定当前节点的名字.
target:指定输出目标“SYSTEM_OUT” 或 “SYSTEM_ERR”,默认:SYSTEM_OUT.
<PatternLayout>:

pattern输出日志的行格式,默认为:%m%n.

<File>:用来定义输出到指定文件的标签.

name:指定当前节点的名字.
fileName:指定输出日志的目的.(要全路径)
PatternLayout:输出日志的行格式,默认为:%m%n.

<RollingFile>:节点用来定义超过指定大小日志文件自动删除旧的并创建新的的Appender.

name:指定当前节点的名字.
fileName:指定输出日志的目的.(要全路径)
PatternLayout:输出格式,默认为:%m%n.
filePattern:指定新建日志文件的名称格式.

<Policies>:指定滚动日志的策略,就是在什么情况下新建日志文件.

<TimeBasedTriggeringPolicy>:Policies子节点,基于时间的滚动策略,interval属性用来指定多久滚动一次,默认是1 hour。modulate=“true”用来自动确定时间:比如现在是早上3am,interval是4,那么滚动是在4、8、12、16

<SizeBasedTriggeringPolicy>:Policies子节点,基于指定文件大小的滚动策略

size:属性用来定义每个日志文件的大小。

<DefaultRolloverStrategy>:用来指定同一个文件夹下最多有几个日志文件时开始删除最旧的。

max: 用来指定日志文件存在的最大值

<Loggers>:用来为各个日志分配输出点及等级

<Root>:为整个项目没有单独分配logger的类指定输出点。

level:定义输出的等级

<appender-ref>

ref:定义日志输出的目的

<Logger>:可以为不同的类指定不同的日志输出点。

level:定义输出的等级
name:输入要指定的类名

<appender-ref>

ref:定义日志输出的目的

<Filters>:用来定义多个过滤器

<ThresholdFilter>:过滤器,用来过滤内容

level:定义过滤日志的等级
onMatch:在匹配是的操作【ACCEPT(接受), DENY(拒绝) or NEUTRAL(中立).】
onMismatch:在比当前等级小时的操作【ACCEPT(接受), DENY(拒绝) or NEUTRAL(中立).】

<>:代表节点

hah:加粗文字代表属性

配置过滤器

Log4j2允许在4个位置指定过滤器:

  1. 将过滤器定义为Configuration的子节点。这些过滤器可以在将事件传递给LoggerConfig之前允许或阻止事件。
  2. 在logger元素中。这些过滤器可以接受或拒绝特定记录器的事件。
  3. 定义在一个appender元素中。这些过滤器可以允许或阻止事件由appender处理。
  4. 在appender-ref元素中。这些过滤器用于确定事件是否应该传递到目的地。

三、引入文件

XInclude

XML配置文件可以包含XInclude引入其他文件。 以下是一个示例log4j2.xml文件,其中包含另外两个文件:

<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns:xi="http://www.w3.org/2001/XInclude"
               status="warn" name="XIncludeDemo">
  <properties>
    <property name="filename">xinclude-demo.log</property>
  </properties>
  <ThresholdFilter level="debug"/>
  <xi:include href="log4j-xinclude-appenders.xml" />
  <xi:include href="log4j-xinclude-loggers.xml" />
</configuration>

log4j-xinclude-appenders.xml:

<?xml version="1.0" encoding="UTF-8"?>
<appenders>
  <Console name="STDOUT">
    <PatternLayout pattern="%m%n" />
  </Console>
  <File name="File" fileName="${filename}" bufferedIO="true" immediateFlush="true">
    <PatternLayout>
      <pattern>%d %p %C{1.} [%t] %m%n</pattern>
    </PatternLayout>
  </File>
</appenders>

log4j-xinclude-loggers.xml:

<?xml version="1.0" encoding="UTF-8"?>
<loggers>
  <logger name="org.apache.logging.log4j.test1" level="debug" additivity="false">
    <ThreadContextMapFilter>
      <KeyValuePair key="test" value="123" />
    </ThreadContextMapFilter>
    <AppenderRef ref="STDOUT" />
  </logger>
 
  <logger name="org.apache.logging.log4j.test2" level="debug" additivity="false">
    <AppenderRef ref="File" />
  </logger>
 
  <root level="error">
    <AppenderRef ref="STDOUT" />
  </root>
</loggers>

四、示例详解

<?xml version="1.0" encoding="UTF-8"?>
<!-- 设置log4j2的自身log级别为INFO -->
<!-- OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<configuration status="INFO" monitorInterval="30">
	<Properties>
    	<Property name="filePath">${sys:catalina.home}/logs</Property>
  	</Properties>
    <appenders>
        <console name="Console" target="SYSTEM_OUT">
        	<Filters>
            	<!-- 过滤器 仅放行DEBUG及以上级别的日志 (OFF,FATAL,ERROR,WARN,INFO)	 -->
        		<!-- 如果不是要调试项目,请不要将日志等级调到DEBUG及以下。	-->
                <ThresholdFilter level="INFO"/>
                <!-- 过滤器 仅放行FATAL以下级别的日志 (INFO,DEBUG,TRACE,ALL)	 -->
                <ThresholdFilter level="OFF" onMatch="DENY" onMismatch="NEUTRAL"/>
            </Filters>
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} [%p] - %l - %m%n"/>
        </console>
 
 		<!-- 将所有日志输出到 Redirect_Logger.log 并设置不累加 -->
 		<File name="log" fileName="${filePath}/Redirect_logger.log" append="false">
 			<Filters>
            	<!-- 过滤器 仅放行DEBUG及以上级别的日志 (OFF,FATAL,ERROR,WARN,INFO) -->
                <ThresholdFilter level="DEBUG"/>
                <!-- 过滤器 仅放行FATAL以下级别的日志 (INFO,DEBUG,TRACE,ALL) -->
                <ThresholdFilter level="FATAL" onMatch="DENY" onMismatch="NEUTRAL"/>
            </Filters>
	       <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} [%p] - %l - %m%n"/>
    	</File>
 		<!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
        <RollingFile name="RollingFileInfo" fileName="${sys:catalina.home}/logs/info.log"
                     filePattern="${sys:catalina.home}/logs/info-%d{yyyy-MM-dd}-%i.log">
            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->        
            <Filters>
            	<!-- 过滤器 仅放行INFO及以上级别的日志 (OFF,FATAL,ERROR,WARN,INFO) -->
                <ThresholdFilter level="INFO"/>
                <!-- 过滤器 仅放行WARN以下级别的日志 (INFO,DEBUG,TRACE,ALL) -->
                <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
            </Filters>
            <!-- 格式化文件输出的日志格式 -->
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} [%p] - %l - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="24" modulate="true"/>
                <SizeBasedTriggeringPolicy size="1MB"/>
            </Policies>
        </RollingFile>
    </appenders>
 
    <loggers>
        <!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
        <logger name="org.springframework" level="INFO"></logger>
        <logger name="org.mybatis" level="INFO"></logger>
        <root level="ALL">
            <appender-ref ref="Console"/>
            <appender-ref ref="log"/>
            <appender-ref ref="RollingFileInfo"/>
        </root>
    </loggers>
</configuration>

评论