日志文件中未打印任何日志,但已在控制台上打印该日志[log4j]

时间:2020-09-07 14:21:22

标签: java logging log4j log4j2

我正在尝试在Java项目中实现log4j,我在目录target / classes / log4j.properties下创建了log4j.properties

下面是我的属性文件内容

#Root logger option 
log4j.rootLogger=INFO, stdout, Rollfile

#Direct log messages to file
log4j.appender.file.File=E:\\TestLogger\\azuremigrationclient_log.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

#Direct log messages to 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{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

我的日志正在控制台中打印出来,但是日志文件“ azuremigrationclient_log.log”为空。什么都没有记录在那里。

3 个答案:

答案 0 :(得分:1)

我浏览了一些文档,发现没有指定log4j.properties的路径,这就是为什么控制台能够打印日志但日志文件中没有打印日志的原因(也没有创建文件)< / p>

static {
 PropertyConfigurator.configure("log4j.properties");
}

将上述代码添加到您的类中,并在configure内,提供log4j的路径。 例如-E:\ JavaCodeDemo \ testcases \ classes \ log4j.properties。

它将起作用。您的代码无法找到log4j.properties文件。

答案 1 :(得分:1)

我阅读了评论和答案,并且我认为如果您尝试将Log4j2与Log4j配置文件(log4j.properties)一起使用,可能会发生这种情况。正如您已经建议的那样,您的配置实际上是针对Log4j的,仅缺少log4j.appender.file = org.apache.log4j.RollingFileAppender。您应该坚持使用Log4j2,并根据其文档(https://logging.apache.org/log4j/2.x/manual/configuration.html)更改配置,例如

appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
appender.console.filter.threshold.type = ThresholdFilter
appender.console.filter.threshold.level = info

appender.rolling.type = RollingFile
appender.rolling.name = RollingFile
appender.rolling.fileName = E:\\TestLogger\\azuremigrationclient_log.log
appender.rolling.filePattern = E:\\TestLogger\\azuremigrationclient-%d{MM-dd-yy-HH-mm-ss}-%i_log.log.gz
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
appender.rolling.policies.type = Policies
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size=10MB
appender.rolling.strategy.type = DefaultRolloverStrategy

rootLogger.level = info
rootLogger.appenderRef.stdout.ref = STDOUT
rootLogger.appenderRef.rolling.ref = RollingFile

答案 2 :(得分:0)

您在rootLogger配置中引用的

称为Rollfile,而Appender的标识符称为file。这不匹配。比较配置文件中stdout的使用情况。

1:您的类型配置丢失,例如:

log4j.appender.file = org.apache.log4j.RollingFileAppender

2:您应该尝试将引用从Rollfile命名为file

log4j.rootLogger=INFO, stdout, file

或将配置的所有file标识符重命名为Rollfile

log4j.appender.Rollfile.File=E:\\TestLogger\\azuremigrationclient_log.log
log4j.appender.Rollfile.MaxFileSize=10MB
log4j.appender.Rollfile.MaxBackupIndex=10
log4j.appender.Rollfile.layout=org.apache.log4j.PatternLayout
log4j.appender.Rollfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

旁注:log4j是一个过时的库,已不再维护。这意味着没有错误修复或任何其他更新,它包含几个已报告的安全漏洞。如果您控制着项目并能够选择日志记录库,则应切换到最新版本,例如Log4j2。它具有一些API可以打破不兼容的更改,但是或多或少是Log4j 1.x的后继者