如何使 log4j 也写到控制台

有没有办法告诉 log4j 将其日志写入文件和控制台? 谢谢 这是我的财产:

log4j.rootLogger=DEBUG,console,R
log4j.rootLogger=INFO, FILE


log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.conversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p - %m%n


log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE.File=log4j.log
log4j.appender.FILE.MaxFileSize=512KB
log4j.appender.FILE.MaxBackupIndex=3
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p - %m%n
181855 次浏览

根日志记录器的定义有点混乱。 看看 Log4j 文档

这是一个标准的 Java 属性文件,这意味着行被视为 key = value 对。您的第二个 log4j.rootLogger行覆盖了第一个,这就解释了为什么您在 console附加符上看不到任何内容。

您需要将两个 rootLogger定义合并为一个。看起来您正在尝试将 DEBUG消息转到控制台,将 INFO消息转到文件。根日志记录器只能具有 级别,因此需要更改配置,以便附加程序具有适当的级别。

虽然我还没有证实这是正确的,但我猜它看起来应该是这样的:

log4j.rootLogger=DEBUG,console,file
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.file=org.apache.log4j.RollingFileAppender

注意,在大小写中也有一个错误-在一个地方有控制台小写,在另一个地方有 CAPS。

Log4j 文件应该类似于如下的 read 注释。

# Define the types of logger and level of logging
log4j.rootLogger = DEBUG,console, FILE


# Define the File appender
log4j.appender.FILE=org.apache.log4j.FileAppender


# Define Console Appender
log4j.appender.console=org.apache.log4j.ConsoleAppender


# Define the layout for console appender. If you do not
# define it, you will get an error
log4j.appender.console.layout=org.apache.log4j.PatternLayout


# Set the name of the file
log4j.appender.FILE.File=log.out


# Set the immediate flush to true (default)
log4j.appender.FILE.ImmediateFlush=true


# Set the threshold to debug mode
log4j.appender.FILE.Threshold=debug


# Set the append to false, overwrite
log4j.appender.FILE.Append=false


# Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n

这对于调试模式下的控制台非常有效

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p - %m%n

按照下面的方式编写根日志记录器,以便在控制台和文件上进行日志记录

RootLogger = ERROR,控制台,文件

并编写各自的定义,如 Target、 Layout 和 ConversionPattern (文件等的 MaxFileSize)。

这正是我正在寻找的基于命令行的工具的用例。希望在控制台上显示 INFO,但希望将更详细的信息记录到日志文件中。经过各种建议,最后使用‘ log4j.appender.FILE.Threshold’来解决这个问题 大概如下:

log4j.rootLogger=DEBUG,CONSOLE,FILE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE.File=output/log.log
log4j.appender.CONSOLE.Threshold=INFO
log4j.appender.FILE.Threshold=DEBUG