log4j2配置文件log4j2.xml详解

黎同
2023-12-01

log4j2配置文件log4j2.xml详解[转载]
地址:https://www.cnblogs.com/new-life/p/9246143.html

参考解析配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<Configuration status="WARN" monitorInterval="60">
	<!-- 变量配置 -->
	<Properties>
		<Property name="log_path">./logs</Property>
	</Properties>

	<!-- appender配置 -->
	<Appenders>
		 <!--这个输出控制台的配置-->
		<Console name="Console" target="SYSTEM_OUT">
			<!--输出日志的格式-->
			<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %5p %X{traceId} -- %m%n" />
		</Console>
		
<!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
		<RollingFile name="SYSTEM" fileName="${log_path}/system.log" filePattern="${log_path}/system.log.%d{yyyy-MM-dd}-%i">
			<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %5p %X{traceId} -- %m%n" />
<!-- Policies:指定滚动日志的策略,就是什么时候进行新建日志文件输出日志.
	TimeBasedTriggeringPolicy:Policies子节点,基于时间的滚动策略,interval属性用来指定多久滚动一次,默认是1 hour。modulate=true用来调整时间:比如现在是早上3am,interval是4,那么第一次滚动是在4am,接着是8am,12am...而不是7am.
	SizeBasedTriggeringPolicy:Policies子节点,基于指定文件大小的滚动策略,size属性用来定义每个日志文件的大小.-->
			<Policies>
				<SizeBasedTriggeringPolicy size="200M"/>
			</Policies>
			<Filters>
				<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->        
				<ThresholdFilter level="info" onMatch="NEUTRAL" onMismatch="DENY" />
				<ContextMapFilter onMatch="DENY" onMismatch="ACCEPT" operator="and">
					<KeyValuePair key="logFilter" value="true"/>
				</ContextMapFilter>
			</Filters>
			<!-- DefaultRolloverStrategy属性用来指定同一个文件夹下最多有几个日志文件时开始删除最旧的,创建新的(通过max属性),
			如不设置,则默认为最多同一文件夹下7个文件,这里设置了180 -->
			<DefaultRolloverStrategy max="180">
				<Delete basePath="${log_path}">
                 	<IfFileName glob="*.log.*" />
                 	<IfLastModified age="7d" />
           		</Delete>
			</DefaultRolloverStrategy>
		</RollingFile>


		<RollingFile name="ERROR" fileName="${log_path}/error.log"
			filePattern="${log_path}/error.log.%d{yyyy-MM-dd}-%i">
			<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %5p %X{traceId} -- %m%n" />
			<Policies>
				<SizeBasedTriggeringPolicy size="200M"/>
			</Policies>
			<Filters>
				<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->        
				<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY" />
			</Filters>
			<!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
			<DefaultRolloverStrategy max="20">
				<Delete basePath="${log_path}">
                 	<IfFileName glob="*.log.*" />
                 	<IfLastModified age="7d" />
           		</Delete>
			</DefaultRolloverStrategy>
		</RollingFile>

	</Appenders>
	<Loggers>
	<!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
	 <!--过滤掉一些无用的信息-->
	<logger name="com.na.guard.datasource.service" level="WARN"/>
	
 <!-- AppenderRef:Logger的子节点,用来指定该日志输出到哪个Appender,如果没有指定,就会默认继承自Root.如果指定了,那么会在指定的这个Appender和Root的Appender中都会输出,此时我们可以设置Logger的additivity="false"只在自定义的Appender中进行输出。-->
      
  	<AsyncLogger name="com.na.dds.iss" level="info" additivity="false">
        <AppenderRef ref="SYSTEM" />
		<AppenderRef ref="ERROR" />
    </AsyncLogger>
     
		<Root level="info">
			<AppenderRef ref="SYSTEM" />
			<AppenderRef ref="ERROR" />
		</Root>
	</Loggers>
</Configuration>
<?xml version="1.0" encoding="UTF-8"?>

<configuration monitorInterval="60" >
    <properties>
        <property name="logpath">./logs</property>
        <Property name="testPattern">%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %X{ip} [%X{uuid}] %c{1}.%M(%F:%L) - %m%n</Property>
    </properties>

    <appenders>
        <RollingRandomAccessFile name="TRACE" immediateFlush="true" bufferSize="1024" fileName="${logpath}/trace.log" filePattern="${logpath}/trace.log.%d{yyyy-MM-dd}.log">
            <PatternLayout pattern="${testPattern}"/>
            <TimeBasedTriggeringPolicy />
            <DefaultRolloverStrategy>
                <Delete basePath="${logpath}" maxDepth="2">
                    <IfFileName glob="trace.log.*.log" />
                    <IfLastModified age="3d" />
                </Delete>
            </DefaultRolloverStrategy>
        </RollingRandomAccessFile>

        <RollingRandomAccessFile name="AUDIT" immediateFlush="false" bufferSize="8192" fileName="${logpath}/audit.log" filePattern="${logpath}/audit.log.%d{yyyy-MM-dd}.log" ignoreExceptions="false">
            <PatternLayout pattern="${testPattern}"/>
            <Filters>
                <ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY" />
            </Filters>
            <TimeBasedTriggeringPolicy />
            <DefaultRolloverStrategy>
                <Delete basePath="${logpath}" maxDepth="2">
                    <IfFileName glob="audit.log.*.log" />
                    <IfLastModified age="7d" />
                </Delete>
            </DefaultRolloverStrategy>
        </RollingRandomAccessFile>


        <Console name="TEST_STDOUT" target="SYSTEM_OUT">
            <PatternLayout pattern="${testPattern}"/>
        </Console>

        <RollingRandomAccessFile name="TEST_File" immediateFlush="true" fileName="${logpath}/logs.log" filePattern="${logpath}/logs.%d{yyyy-MM-dd}-%i.log" ignoreExceptions="false">
            <PatternLayout pattern="${testPattern}"/>
            <SizeBasedTriggeringPolicy size="200M"/>
            <DefaultRolloverStrategy>
                <Delete basePath="${logpath}" maxDepth="2">
                    <IfFileName glob="logs.*.log" />
                    <IfLastModified age="7d" />
                </Delete>
            </DefaultRolloverStrategy>
        </RollingRandomAccessFile>
        <RollingRandomAccessFile name="TEST_ERRORFile" immediateFlush="true" fileName="${logpath}/errors.log" filePattern="${logpath}/errors.%d{yyyy-MM-dd}-%i.log" ignoreExceptions="false">
            <PatternLayout pattern="${testPattern}"/>
            <Filters>
                <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY" />
            </Filters>
            <SizeBasedTriggeringPolicy size="200M"/>
            <DefaultRolloverStrategy>
                <Delete basePath="${logpath}" maxDepth="2">
                    <IfFileName glob="errors.*.log" />
                    <IfLastModified age="7d" />
                </Delete>
            </DefaultRolloverStrategy>
        </RollingRandomAccessFile>

    </appenders>

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

        <Logger additivity="false" name="com.na.guard.datasource.service.MonitorCoreService">
            <level value="WARN"/>
        </Logger>
     
        <!-- 在开发和测试环境启用,输出sql -->
        <Logger additivity="true" name="com.na.o2o.dds.issAdmin.dao.mapper">
            <level value="DEBUG"/>
        </Logger>

        <Root level="INFO" includeLocation="true">
         <!-- AppenderRef:Root的子节点,用来指定该日志输出到哪个Appender.-->
            <AppenderRef ref="TEST_STDOUT" />
            <AppenderRef ref="TEST_File" />
            <AppenderRef ref="TEST_ERRORFile" />
        </Root>
    </loggers>
</configuration>
 类似资料: