Java 日志文件中没有打印日志,但它正在cosole[log4j]上打印

Java 日志文件中没有打印日志,但它正在cosole[log4j]上打印,java,logging,log4j,log4j2,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 lo

我试图在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”将变为空。那里没有记录任何内容。

您在rootLogger配置中引用的文件被称为
Rollfile
,而您的追加器标识符被称为
file
。这不匹配。与配置文件中使用的
stdout
进行比较

1:缺少您的类型配置,例如:

log4j.appender.file = org.apache.log4j.RollingFileAppender
2:您应该尝试将引用从
Rollfile
命名为
file

log4j.rootLogger=INFO, stdout, 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的继承者。您在rootLogger配置中引用的文件称为
Rollfile
,而追加器的标识符称为
file
。这不匹配。与配置文件中使用的
stdout
进行比较

1:缺少您的类型配置,例如:

log4j.appender.file = org.apache.log4j.RollingFileAppender
2:您应该尝试将引用从
Rollfile
命名为
file

log4j.rootLogger=INFO, stdout, 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的继承者。我查看了一些文档,发现我没有指定Log4j.properties的路径,这就是为什么console能够打印日志,但日志文件中没有打印日志(也没有创建任何文件)

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


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

我查看了一些文档,发现我没有指定log4j.properties的路径,这就是为什么console能够打印日志,但日志文件中没有打印日志(也没有创建任何文件)

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


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

我阅读了注释和答案,我认为如果您试图将Log4j2与log4j配置文件(log4j.properties)一起使用,可能会发生这种情况。您的配置实际上是针对Log4j的,只是缺少了
Log4j.appender.file=org.apache.Log4j.RollingFileAppender
,正如已经有人建议的那样。您应该坚持使用Log4j2,并根据其文档()更改配置,例如


我阅读了注释和答案,我认为如果您试图将Log4j2与Log4j配置文件(Log4j.properties)一起使用,可能会发生这种情况。您的配置实际上是针对Log4j的,只是缺少了
Log4j.appender.file=org.apache.Log4j.RollingFileAppender
,正如已经有人建议的那样。您应该坚持使用Log4j2,并根据其文档()更改配置,例如


我将rollfile更新为file,但日志文件仍然为空。我遵循了一个教程,但仍然面临这个问题,在控制台上,日志正在打印好。您的appender类型配置丢失:
log4j.appender.file=org.apache.log4j.RollingFileAppender
我添加了它,日志文件中仍然没有任何内容,它是否与日志文件路径有关?找不到日志文件。该文件将从log4j创建,但程序必须对路径具有写访问权限。我已将rollfile更新为file,但日志文件仍然为空。我遵循了一个教程,但仍然面临这个问题,在控制台上,日志正在打印好。您的appender类型配置丢失:
log4j.appender.file=org.apache.log4j.RollingFileAppender
我添加了它,日志文件中仍然没有任何内容,它是否与日志文件路径有关?找不到日志文件。该文件将从log4j创建,但程序必须对路径具有写访问权限。