Java Log4j选择性追加器

Java Log4j选择性追加器,java,log4j,Java,Log4j,我有一个java应用程序,它有三个“形上说”的对象。。。 一类动物,一类食物,它们没有任何继承关系或接口。最后一类经理有一份动物和食物清单,经理负责动物和食物所在的动物园 说到点子上 我正在使用log4j,我需要登录到一个txt文件,如果并且仅当动物列表中的某些内容发生变化。。。动物死了,生了什么的。。。我需要登录到系统。如果且仅当食物列表中的某些内容发生变化时退出。。。新的食物是需要的,食物被吃了,无论什么 我的问题: 我怎样才能用log4j做到这一点 我在这里发现: 类似于动态更改appe

我有一个java应用程序,它有三个“形上说”的对象。。。 一类动物,一类食物,它们没有任何继承关系或接口。最后一类经理有一份动物和食物清单,经理负责动物和食物所在的动物园

说到点子上

我正在使用log4j,我需要登录到一个txt文件,如果并且仅当动物列表中的某些内容发生变化。。。动物死了,生了什么的。。。我需要登录到系统。如果且仅当食物列表中的某些内容发生变化时退出。。。新的食物是需要的,食物被吃了,无论什么

我的问题: 我怎样才能用log4j做到这一点

我在这里发现:

类似于动态更改appender

String targetLog="where ever you want your log"
FileAppender apndr = new FileAppender(new PatternLayout("%d %-5p [%c{1}] %m%n"),targetLog,true);    
logger.addAppender(apndr);
logger.setLevel((Level) Level.ALL);
但我认为这是非常丑陋的,并且容易出错,因为在整个应用程序中不断添加和删除appender

有没有更好的方法来处理这个问题 我能要两个一个给动物一个给食物吗

有什么建议吗


谢谢

您可以通过log4j.xml文件中的配置严格执行此操作。您可以在其中定义两个appender,然后有两个记录器元素,一个将动物绑定到第一个appender,另一个将食物绑定到另一个appender。可能您也应该有一个元素来定义默认行为。

我就是这样让它工作的:

配置属性 以及加载记录器和日志:

public static void main(String[] args) {
    PropertyConfigurator.configure("log4j.properties");
    animalLogger.debug("Hello animalLogger message");   
    foodlLogger.debug("Hello reportsLog message");
} 
public static void main(String[] args) {
    PropertyConfigurator.configure("log4j.properties");
    animalLogger.debug("Hello animalLogger message");   
    foodlLogger.debug("Hello reportsLog message");
}