为什么此代码仅附加在跟踪日志中而不是其他日志中。我该如何纠正?

时间:2016-06-17 11:34:19

标签: xml log4j log4j2

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Properties>
        <Property name="log-path">logs</Property>
    </Properties>
  <Appenders>
   <Console name="console-log" target="SYSTEM_OUT">
            <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"/>
    </Console>
  <File name="trace-log" fileName="${log-path}/trace.log" immediateFlush="true" append="true">
            <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </File>
<File name="error-log" fileName="${log-path}/error.log" immediateFlush="true" append="true">
            <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </File>
<File name="debug-log" fileName="${log-path}/debug.log" immediateFlush="true" append="true">
            <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </File>
<File name="info-log" fileName="${log-path}/info.log" immediateFlush="true" append="true">
            <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </File>
  </Appenders>
  <Loggers>

    <Root level="error">
      <AppenderRef ref="error-log"/>
<AppenderRef ref="console-log"/>
    </Root>
<Root level="info">
      <appender-ref ref="info-log"/>
<AppenderRef ref="console-log"/>
    </Root>
<Root level="debug">
      <AppenderRef ref="debug-log"/>
<AppenderRef ref="console-log"/>
    </Root>
<Root level="trace">
      <AppenderRef ref="trace-log"/>
<AppenderRef ref="console-log"/>
    </Root>

  </Loggers>
</Configuration>

我上面编写的代码仅将所有内容附加到trace-log。事实上,最后调用的root只是存储所有日志信息。我该如何纠正?我希望所有日志文件都能直观地工作。

1 个答案:

答案 0 :(得分:1)

这里有一些问题:

  1. 您只能拥有一个根记录器。你有几个。 Log4j只会使用其中一个。
  2. 您似乎只想要一个特定级别转到每个文件。 level属性显示“允许此级别或更高级别的事件”。因此,具有level =“error”的根记录器将允许事件处于级别错误或致命错误。信息的根记录器将允许级别信息,错误或致命事件。
  3. 你可以试试这个:

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="WARN">
      <Properties>
        <Property name="log-path">logs</Property>
      </Properties>
      <Appenders>
        <Console name="console-log" target="SYSTEM_OUT">
            <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"/>
        </Console>
        <File name="trace-log" fileName="${log-path}/trace.log" immediateFlush="true" append="true">
            <ThresholdFilter level="debug" onMatch="DENY" onMismatch="ACCEPT"/>
            <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </File>
        <File name="error-log" fileName="${log-path}/error.log" immediateFlush="true" append="true">
            <Filters>
              <ThresholdFilter level="error" onMatch="NEUTRAL" onMismatch="DENY"/>
              <ThresholdFilter level="fatal" onMatch="DENY" onMismatch="ACCEPT"/>
            </Filters>
            <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </File>
        <File name="debug-log" fileName="${log-path}/debug.log" immediateFlush="true" append="true">
            <Filters>
              <ThresholdFilter level="debug" onMatch="NEUTRAL" onMismatch="DENY"/>
              <ThresholdFilter level="info" onMatch="DENY" onMismatch="ACCEPT"/>
            </Filters>            <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </File>
        <File name="info-log" fileName="${log-path}/info.log" immediateFlush="true" append="true">
            <Filters>
              <ThresholdFilter level="info" onMatch="NEUTRAL" onMismatch="DENY"/>
              <ThresholdFilter level="warn" onMatch="DENY" onMismatch="ACCEPT"/>
            </Filters>
            <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </File>
      </Appenders>
      <Loggers>
        <Root level="trace">
          <AppenderRef ref="error-log"/>
          <AppenderRef ref="info-log"/>
          <AppenderRef ref="debug-log"/>
          <AppenderRef ref="trace-log/>
          <AppenderRef ref="console-log"/>
        </Root>
      </Loggers>
    </Configuration>