2011-08-25 123 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