2016-04-28 95 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。可能你也應該有一個元素來定義默認行爲。