如何禁用log4j.rootLogger的输出?

我想在登录文件时禁用输出到控制台。 请参阅下面的配置文件:

log4j.rootLogger=info,stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L --- %m%n log4j.category.FileLog=info,R log4j.appender.R=org.apache.log4j.DailyRollingFileAppender log4j.appender.R.File=E:\\temp\\FileLog log4j.appender.R.Append = true log4j.appender.R.DatePattern='.'yyyy-MM-dd'.log' log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%m[%d{MM-dd HH:mm:ss}]%n 

我用的时候:

 Logger.getLogger("FileLog").info("LogText-FileLog"); 

这个日志打印到stdout ,我怎么能禁用它?

您可以使用`log4j.additivity.FileLog = false,这是您要查找的’标志’。

从官方log4j文档 :

记录器C的日志语句的输出将转到C及其祖先中的所有appender。 这就是术语“appender additivity”的含义。

但是,如果记录器C的祖先,比如P,将additivity标志设置为false,那么C的输出将被定向到C中的所有appender及其祖先,包括P但不包括P的任何祖先中的appender。 。

记录器默认情况下将其可加性标志设置为true。

从根记录器中删除“stdout”(如在其他答案中所提出的)可能不是解决方案,因为我认为在某些情况下您仍然对该控制台日志感兴趣。

从这里删除标准输出

 log4j.rootLogger=info,stdout 

至:

 log4j.rootLogger=info 

我不知道用户提供的确切问题的答案,但面临与以下log4j代码类似的问题:

 log4j.rootCategory=INFO, console log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.target=System.err log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n 

我通过更改从控制台中删除了所有日志行

 log4j.rootCategory=INFO, console 

 log4j.rootCategory=OFF, console 

从根记录器中删除“stdout”。 它将停止在控制台上书写。