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" />
本文为博主原创文章,未经博主允许不得转载。
更多内容请访问:IT源点
注意:本文归作者所有,未经作者允许,不得转载