配置

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>

results matching ""

    No results matching ""