2011-08-25 57 views
1

我的記錄器記錄到我的日誌文件和catalina.out我不知道如何解決它,我不希望記錄器登錄到兩者。log4j記錄到我的日誌文件和catalina.out

這裏是我的代碼:

private static final Logger logger = Logger.getLogger("FA"); 

[...]

if(logger.getAppender("walletServicesAppender")==null) 
    { 
     try 
     { 

     appenderLayout = new PatternLayout(); 
     appenderLayout.setConversionPattern("%d %p - %m%n"); 
     appender = new FileAppender(appenderLayout,"/home/marcel/try/log_file_name.txt"); 
     appender.setName("walletServicesAppender"); 
     logger.addAppender(appender); 
     logger.setLevel(org.apache.log4j.Level.ALL); 
    } 
    catch (IOException ex) 
    { 
     logger.error("Cannot access log file: "+ex.getLocalizedMessage()); 
    }  
    catch(Exception ex) 
    { 
     logger.error("Unknown exception: "+ex.getLocalizedMessage()); 
    } 
    } 
logger.info("INFO MESSAGE!"); 

[...]

這總是讓雙日誌log_file_name.txt和卡特琳娜。 out

感謝您的幫助。

編輯:

logger.setAdditivity(false); 

解決我的問題

感謝您的幫助!

+0

當你「開始」log4j時,你正在使用哪個配置器?基本?屬性?此外,您創建的任何記錄器都從父記錄器繼承(並因此「繼承」他們的appender)。是否有人在父記錄器上甚至RootLogger上配置了ConsoleAppender(默認情況下沒有appender)? –

回答

3

你可能有一個ConsoleAppender在你的log4j的配置,在您的log4j.properties文件,或等同的東西查了這樣一行

log4j.appender.SOME_APPENDER_NAME=org.apache.log4j.ConsoleAppender 

如果您正在使用XML配置。

+0

我沒有log4j.properties文件還沒有,因爲我所有的一個代碼中的配置。也許這是錯誤? – Starbax

+1

也許你可以嘗試在代碼中明確地設置「appender additivity」爲false。無論如何創建和使用一個簡單的log4j配置文件是微不足道的,我會去做。 – agnul

+0

非常感謝你,這對我有效。我只是設置logger.setAdditivity(false);那麼它的作品感謝! – Starbax

1

這聽起來像有連接到您的記錄器的另一附加器,你可以嘗試添加該代碼,以找出哪些附加目的地是:

for (Enumeration e = logger.getAllAppenders(); e.hasMoreElements();) { 
    System.out.println("A:" + ((Appender) e.nextElement()).getName()); 
} 

再看看通過你的源和/或配置文件,看看它正在設置。

+0

我已經想過了,並使用logger.removeAllAppenders();這沒有幫助...我試過你的代碼,這是我的日誌: [INFO] INFO MESSAGE! 答:walletServicesAppender 只是一個appander,我 前加入,我認爲我的記錄器將其提供給rootLogger,但我不知道如何禁止這個 – Starbax