Java Log4j:如何配置多个appender:一个指向控制台和文件,另一个严格指向文件?

Java Log4j:如何配置多个appender:一个指向控制台和文件,另一个严格指向文件?,java,log4j,Java,Log4j,对于我的应用程序,我成功地配置了log4j以生成多个日志 两个追加器都输出到控制台和文件但是由于第一个日志是我的主日志,我觉得这个日志应该是唯一输出到控制台的日志。 是否可以禁用第二个日志,以便log4j不使用控制台,但仍写入文件 log4j.rootLogger=DEBUG, stdout # stdout is set to be ConsoleAppender sending its output to System.out log4j.appender.stdout=org.apach

对于我的应用程序,我成功地配置了log4j以生成多个日志

两个追加器都输出到控制台和文件
但是由于第一个日志是我的主日志,我觉得这个日志应该是唯一输出到控制台的日志。

是否可以禁用第二个日志,以便log4j不使用控制台,但仍写入文件

log4j.rootLogger=DEBUG, stdout

# stdout is set to be ConsoleAppender sending its output to System.out
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss SSS}ms %-5p [%t] - %m%n

log4j.appender.X=org.apache.log4j.FileAppender
log4j.appender.X.File=X.log
log4j.appender.X.Append=false 
log4j.appender.X.layout=org.apache.log4j.PatternLayout
log4j.appender.X.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss SSS}ms %-5p [%t] - %m%n
log4j.logger.X=DEBUG,X
第二个追加器“Y”的配置方式与“X”相同

我还考虑在shell窗口中完全禁用appender和use:tail-fx.log的控制台来查看日志,但在Eclipse中工作时这不是很实用

任何提示都将不胜感激


关于,

我所知道的唯一方法是禁用某些记录器(类别)的可加性,此时可以将它们定向到一个或另一个附加器中。例如

log4j.logger.com.foo.bar=INFO, X
log4j.additivity.com.foo.bar=false

不将根记录器输出到stdout,而是将X记录器同时发送到X和stdout附加器,怎么样?这样,Y记录器也不会输出到标准输出

log4j.logger.X=DEBUG,X,stdout
两个追加器都输出到控制台和文件

我认为您对记录器和appender之间的区别感到困惑

appender只指向一个位置—在配置中,您已经声明了ConsoleAppender和FileAppender。这是两个独立的实体。这些附加器都不会输出到多个位置

可以将记录器配置为将其输出发送到许多附加器,并且您已经通过
rootLogger
将所有记录器配置为将其输出发送到控制台

如果只希望某些记录器向控制台发送输出,则不要将根记录器配置为使用控制台,而只配置特定记录器名称


如果您想让除
X
之外的所有记录器将其输出发送到控制台,则需要禁用
X
的可加性,以便它不会从根记录器继承。

您说得对,谢谢您的澄清。我从根记录器中删除了ConsoleAppender,并将sdtout(ConsoleAppender)添加到以下行:log4j.logger.X=DEBUG,X,stdout。我觉得很傻,谢谢!您可以阅读以下教程。它很短但很清楚。当您了解Logger、Appender和Layout后,就可以轻松地解决这个问题。