2016-04-28 64 views
-3

我有有一个Java应用程序“hypotetically说” 3个对象... 1类动物的,该类食品的1,则不受任何继承或接口相关..和在类经理至极是有动物和食品的名单列表中的最后一个,经理是RESPONSABLE一个动物园在那里的动物和食物..Log4j的选择性的appender

给点...

上午使用log4j和I n从登录到一个txt文件如果只有,只有如果在动物列表中的某些内容发生变化...(动物死亡,出生或曾经...),我需要登录到System.out IF和ONLYLY IF东西在食品列表中的更改...(新食物需求,食物被吃了,什么都...)

我的问题:

我如何能做到这一点与log4j的?

我已经在这里找到: Log4j : Creating/Modifying appenders at runtime, log file recreated and not appended

类似动态变化的附加器

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); 

,但我认为这是非常难看,而且容易出错遍布孔应用不断地添加和删除附加器..

有没有什么更好的办法来处理这个 我可以有2个记录器(一个动物1对 餐饮)??

有什么建议?

谢谢

回答

0

这是我如何得到它的工作:

配置性能

log4j.rootLogger=TRACE, stdout 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d [%5F:%t:%L] - %m%n 

log4j.appender.animalLogger=org.apache.log4j.FileAppender 
log4j.appender.animalLogger.File=animal.log 
log4j.appender.animalLogger.layout=org.apache.log4j.PatternLayout 
log4j.appender.animalLogger.layout.ConversionPattern=%d [%5F:%t:%L] - %m%n 

log4j.category.animalLogger=DEBUG, animalLogger 
log4j.additivity.animalLogger=false 

log4j.category.foodlLogger=DEBUG, stdout 
log4j.additivity.foodlLogger=false 

static final Logger animalLogger = Logger.getLogger("animalLogger"); 
static final Logger foodlLogger = Logger.getLogger("foodlLogger"); 

,并载入记录和日志记录:

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

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