log4j2配置详解之Configuration

  |   0 评论   |   0 浏览

log4j2支持JSON、YAML、properties、XML配置文件。
日志的级别为TRACE < DEBUG < INFO < WARN < ERROR < FATAL。

整体示例:

<?xml version="1.0" encoding="UTF-8" ?>
<Configuration status="error">
    <!-- 定义输出源 -->
    <Appenders>
        <!-- 输出到控制台 -->
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="log4j2 %d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
        </Console>
        <!-- 输出到文件 -->
        <File name="fileName" fileName="e:/logs/A1.log" append="true">
            <PatternLayout pattern="log4j2 %d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
        </File>
        <!-- 输出到文件,超过大小之后对文件进行滚动处理,按照配置规则进行滚动 -->
        <RollingFile name="rollingFile" fileName="e:/logs/test.log"
                     filePattern="e:/logs/$${date:yyyy-MM-dd}/test-%d{yyyy-MM-dd-HH}-%i.log">
            <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="2 KB"/>
            </Policies>
            <DefaultRolloverStrategy max="10"/>
        </RollingFile>
        <!-- 通过socket进行传输 -->
        <!--<Socket name="socket" host="localHost" port="5000">-->
            <!--<PatternLayout pattern="%t %-5p %c{2} - %m%n"/>-->
        <!--</Socket>-->
        <!-- 异步输出 -->
        <Async name="ASYNC" includeLocation="true">
            <AppenderRef ref="fileName"/>
        </Async>
    </Appenders>
    
    <!--  具体的日志配置 -->
    <Loggers>
        <Logger name="org.apache.log4j.xml" level="info"/>
        <!--<Root level="debug">-->
            <!--<AppenderRef ref="Console"/>-->
        <!--</Root>-->
        <!-- AsyncRoot配置下面,需要配置includeLocation="true"属性才能打印出行号和文件名 -->
        <!-- 异步输出 -->
        <AsyncRoot level="debug" includeLocation="true">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="ASYNC"/>
            <AppenderRef ref="rollingFile"/>
        </AsyncRoot>
    </Loggers>
</Configuration>

Configuration

advertiser:(可选)把日志广播出去,接着由Chainsaw(它是一个基于gui的日志查看器)或者其他系统来接收这些广播,并以图形的形式展示出来。log4j2只提供了multicastdns广播插件。可以在FileAppender或者SocketAppender里面配置advertiseURI属性。
dest:默认是out,可以配置err、out、一个文件地址、url。
monitorInterval:自动重配置间隔时间设置,单位为秒,最小间隔时间是5秒。
name:配置的名字。
packages:以逗号分隔的包名列表,用于搜索插件。每个类加载器只加载一次插件,因此在开启重新配置下,改变这个值将不起效果。
schema:模式验证,只有在设置了strict=true的情况下才生效,如果没有设置那么不进行模式验证。
shutdownHook:指定在JVM关闭时Log4j2是否应该自动关闭,在默认情况下是启用的,但可以通过将此属性设置为“disable”来禁用。
strict:允许使用严格的XML格式。JSON配置中不支持。
status:Log4j2内部日志事件的级别。当需要排查Log4j2的问题时,建议设置为trace,因为它会将Log4j2初始化、切换和其它内部操作打印出来。

Loggers

<Logger name="com.foo.Bar" level="TRACE"/>

的配置实际上是这样的

<Logger name="com.foo.Bar" level="trace">
  <AppenderRef ref="Console"/>
</Logger>

因为它会继承Root的配置,root的配置如下:

<Root level="error">
  <AppenderRef ref="Console"/>
</Root>

这里在控制台会输出两份com.foo.Bar的日志,是因为日志的可加性,additivity默认是true,可以把他设置为false,如:

<Logger name="com.foo.Bar" level="trace" additivity="false"/>

Property

示例如:

<Properties>
<Property name="filename">target/rolling1/rollingtest-$${sd:type}.log</Property>
</Properties>

后面可以这样使用${filename}。

base64:Base64编码数据,格式为${base64:Base64_encoded_data},如:${base64:SGVsbG8gV29ybGQhCg==} 输出 Hello World!。
bundle:资源绑定。格式为:${bundle:BundleName:BundleKey},示例如:${bundle:com.domain.Messages:MyKey}。
ctx:线程上下文映射(MDC),如:$${ctx:loginId}。
date:插入指定的时间格式。如:$${date:MM-dd-yyyy}。
env:系统环境变量,格式为${env:ENV_NAME} 或者 ${env:ENV_NAME:-default_value} ,如:$${env:USER},$${env:USER:-jdoe}。
jndi:设置JNDI上下文,如:$${jndi:logging/context-name}。注意:在android下面不能使用。
sys:系统属性,格式为${sys:some.property}或者 ${sys:some.property:-default_value},如:${sys:logPath}。

XInclude

可以使用这个标签来引入xml文件。
示例:

<xi:include href="log4j-xinclude-appenders.xml" />

也可以关注我的公众号:程序之声

关注公众号,领取更多资源

本文为博主原创文章,未经博主允许不得转载。