如何将日志写入两个不同的记录器?

时间:2015-04-25 15:56:47

标签: java logging configuration log4j log4j2

我能够使用log4j2创建两个日志,并且能够将日志写入单个日志文件。如何将日志写入两个不同的记录器?

我将log4j2.xml文件修改为有两个记录器。

任何示例示例?

2 个答案:

答案 0 :(得分:1)

您可能希望配置多个appender,而不是配置多个记录器。例如:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn">
  <Appenders>
    <File name="MyFile" fileName="logs/app.log">
      <PatternLayout>
        <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
      </PatternLayout>
    </File>
    <File name="Other" fileName="logs/other.log">
      <PatternLayout>
        <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
      </PatternLayout>
    </File>
  </Appenders>
  <Loggers>
    <Root level="trace">
      <AppenderRef ref="MyFile" level="trace"/>
      <AppenderRef ref="Other" level="debug"/>
    </Root>
  </Loggers>
</Configuration>

答案 1 :(得分:1)

第1点

我猜您要求将一个日志写入不同的目的地,例如。不同的文件。正如Remko所提到的,您可以配置不同的appender来处理每个日志文件。

由于我没有足够的声誉评论Remko的回答,这里有一些我的其他例子:

如果您使用DEBUG级别作为日志,请调用logger.debug("your message")并配置您的log4j2.xml,如下所示,您将看到&#34;您的消息&#34;登录file1.log和file2.log。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
  <Appenders>
    <File name="File1" fileName="logs/file1.log">
      <PatternLayout>
        <Pattern>"Add your pattern here"</Pattern>
      </PatternLayout>
    </File>
    <File name="File2" fileName="logs/file2.log">
      <PatternLayout>
        <Pattern>"Add your pattern here"</Pattern>
      </PatternLayout>
    </File>
  </Appenders>
  <Loggers>
    <Root level="debug">
      <!--This will write the same log into both of the files -->
      <AppenderRef ref="File1" level="debug"/>
      <AppenderRef ref="File2" level="debug"/>
    </Root>
  </Loggers>
</Configuration>

第2点

我们应该注意到,在Remko的例子中,所有日志进入其他日志也会被写入MyFile。有关解释,请参阅Log4j2 Documentation,示例6中的更多内容。简而言之,由于TRACE是一个低于DEBUG的杠杆,所有具有DEBUG级别的日志都可以在TRACE中传递并记录。

第3点

写入不同目的地的另一种可能性是通过Appender Additivity。

  

将转发给定记录器的每个已启用的日志记录请求   Logger的LoggerConfig中的所有投放者以及   LoggerConfig的父母的投降。