配置
XML语法
Log4j可以使用两种XML风格进行配置:简洁和严谨。简洁的格式使配置很容易,因为元素名称匹配它们表示的组件,但是它不能用XML模式验证。例如,ConsoleAppender通过在其父Appender元素下声明名为Console的XML元素来配置的。但是,元素和属性名称不区分大小写。此外,属性可以指定为XML属性,也可以指定为没有属性且具有文本值的XML元素。所以:
<PatternLayout pattern="%m%n"/>
和
<PatternLayout>
<Pattern>%m%n</Pattern>
</PatternLayout>
是等效的。
下面的文件表示XML配置的结构,但请注意,下面斜体的元素表示将出现在其位置的简明元素名称。
<?xml version="1.0" encoding="UTF-8"?>;
<Configuration>
<Properties>
<Property name="name1">value</property>
<Property name="name2" value="value2"/>
</Properties>
<filter ... /><!-- 斜体 -->
<Appenders>
<appender ... ><!-- 斜体 -->
<filter ... /><!-- 斜体 -->
</appender><!-- 斜体 -->
...
</Appenders>
<Loggers>
<Logger name="name1">
<filter ... />
</Logger>
...
<Root level="level">
<AppenderRef ref="name"/>
</Root>
</Loggers>
</Configuration>
请参考本页中很多关于appender、filter和logger的示例声明。
严格的XML
除了上面简洁的XML格式,Log4j允许以更“正常”的XML方式指定配置,这可以使用XML模式进行验证。这是通过用如下所示的对象类型替换上面的友好元素名称来实现的。例如,不是ConsoleAppender配置为使用名为控制台的元素配置,而是配置为一个appender元素,类型属性包含“控制台”。
<?xml version="1.0" encoding="UTF-8"?>;
<Configuration>
<Properties>
<Property name="name1">value</property>
<Property name="name2" value="value2"/>
</Properties>
<Filter type="type" ... />
<Appenders>
<Appender type="type" name="name">
<Filter type="type" ... />
</Appender>
...
</Appenders>
<Loggers>
<Logger name="name1">
<Filter type="type" ... />
</Logger>
...
<Root level="level">
<AppenderRef ref="name"/>
</Root>
</Loggers>
</Configuration>
下面是使用严格格式的配置示例。
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="debug" strict="true" name="XMLConfigTest"
packages="org.apache.logging.log4j.test">
<Properties>
<Property name="filename">target/test.log</Property>
</Properties>
<Filter type="ThresholdFilter" level="trace"/>
<Appenders>
<Appender type="Console" name="STDOUT">
<Layout type="PatternLayout" pattern="%m MDC%X%n"/>
<Filters>
<Filter type="MarkerFilter" marker="FLOW" onMatch="DENY" onMismatch="NEUTRAL"/>
<Filter type="MarkerFilter" marker="EXCEPTION" onMatch="DENY" onMismatch="ACCEPT"/>
</Filters>
</Appender>
<Appender type="Console" name="FLOW">
<Layout type="PatternLayout" pattern="%C{1}.%M %m %ex%n"/><!-- class and line number -->
<Filters>
<Filter type="MarkerFilter" marker="FLOW" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
<Filter type="MarkerFilter" marker="EXCEPTION" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</Appender>
<Appender type="File" name="File" fileName="${filename}">
<Layout type="PatternLayout">
<Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
</Layout>
</Appender>
<Appender type="List" name="List">
</Appender>
</Appenders>
<Loggers>
<Logger name="org.apache.logging.log4j.test1" level="debug" additivity="false">
<Filter type="ThreadContextMapFilter">
<KeyValuePair key="test" value="123"/>
</Filter>
<AppenderRef ref="STDOUT"/>
</Logger>
<Logger name="org.apache.logging.log4j.test2" level="debug" additivity="false">
<AppenderRef ref="File"/>
</Logger>
<Root level="trace">
<AppenderRef ref="List"/>
</Root>
</Loggers>
</Configuration>