如何使用log4j将不同包的消息记录到同一个日志文件中?

时间:2017-09-14 03:07:23

标签: java log4j

我是使用log4j的初学者,请不要介意我的愚蠢问题。

现在我有一个jar包含一些我将在不同类中使用的方法。让我们说一个计算器方法。此方法有几个需要记录的消息和异常处理。

我有两个类需要使用此方法进行计算,这两个类有自己的日志文件。 classA.log和classB.log

问题是如何将来自计算器的消息和错误记录到classA.log和classB.log中取决于哪个类正在调用计算器。

我想要classA.log和classB.log,如:

[datetime] INFO - [foo.A] This is class A
[datetime] INFO - [foo.A] Now calling calculator
[datetime] INFO - [cal.mycal.Calculator] Now enter calculator and start calculating
[datetime] WARN - [cal.mycal.Calculator] A warning message from calculator
[datetime] ERROR - [cal.mycal.Calculator] An error message from calculator
[datetime] INFO - [foo.A] Some mistakes are made.
[datetime] INFO - [foo.A] Class A done

在log4j.xml中,我需要添加一个logger并参考我需要记录的类

  <logger name="foo.A">
    <level value="INFO" />
    <appender-ref ref="A" />
  </logger> 
  <logger name="cal.mycal.Calculator">
    <level value="INFO" />
    <appender-ref ref="A" />
  </logger>

和appender

  <appender name="A" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="File" value="log/classA.log"/>
    <param name="DatePattern" value="'.'yyyy-MM-dd"></param>
    <param name="Append" value="true"/>
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="[%d{dd-MMM-yyyy HH:mm:ss}] %-5p - [%c] %m%n"/>
    </layout>
  </appender>

但是这样做之后,来自foo.B的方法调用将不会写入classB.log。来自Calculator的所有消息都写入classA.log

我如何获得记录器:

protected final Log log = LogFactory.getLog(getClass());

我可以提出一些建议吗?谢谢。

0 个答案:

没有答案