Log4j 保存到文件问题

Log4j save to file issues

我在使用 log4j 创建日志文件并保存到其中时遇到问题。控制台附加器工作正常,但我无法让它创建日志或将日志保存到文件中。

jar 文件位于正确的类路径中,我觉得我已经尝试了所有方法(除了可行的 -_-)

希望大家能帮帮我,把我的头发扯出来!

Log4j.properties 文件位于程序的根文件夹中。

Log4j.properties 文件。

#log4j.rootLogger=TRACE, file
#log4j.rootLogger=DEBUG, file
log4j.rootLogger=INFO, file
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=thisLog.log
#log4j.appender.file.MaxBackupIndex=2
#log4j.appender.file.MaxFileSize=1024KB
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ISO8601} %-5p [%t @ %F:%M:%L] %m%n
log4j.appender.file.ImmediateFlush=true
log4j.rootLogger=INFO, con
log4j.appender.con=org.apache.log4j.ConsoleAppender
#log4j.appender.con.MaxBackupIndex=2
#log4j.appender.con.MaxFileSize=1024KB
log4j.appender.con.layout=org.apache.log4j.PatternLayout
log4j.appender.con.layout.ConversionPattern=%d{ISO8601} %-5p [%t @ %F:%M:%L] %m%n 

Java代码:

static final Logger logger = Logger.getLogger(TgsSim2.class); 

public static void main(String[] args) throws IOException
{
    PropertyConfigurator.configure("log4j.properties");

    logger.info("THIS IS A TEST USING .INFO");
    logger.debug("THIS IS A TEST USING .DEBUG");
    logger.warn("THIS IS A TEST USING .WARN");

    new TgsSim2();

}

可行的解决方案:

#Root logger option
log4j.rootLogger=DEBUG, stdout, file
# Redirect log messages to console
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{[dd.MM.yyyy] [HH:mm:ss]} %p [%t] %c (%F:%L) - %m%n
# Redirect log messages to a log file, support file rolling.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=myLog.log
log4j.appender.file.MaxFileSize=1MB
log4j.appender.file.MaxBackupIndex=3
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.conversionPattern=%d{[dd.MM.yyyy] [HH:mm:ss]} %p [%t] %c (%F:%L) - %m%n

根据 apache Log4j 手册,您没有正确使用 Appender。 RollingFileAppender 使用 log4j.appender.file=org.apache.log4j.RollingFileAppender 而不是 log4j.appender.file=org.apache.log4j.FileAppender 将你的 Log.properties 修改成这样。

#Root logger option

log4j.rootLogger=DEBUG, stdout, file
# Redirect log messages to console
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.SSS} [%-5p] %c{1}(%L): - %m%n

# Redirect log messages to a log file, support file rolling.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=myLog.log
log4j.appender.file.MaxFileSize=1MB
log4j.appender.file.MaxBackupIndex=3

根记录器选项

log4j.rootLogger=INFO, file, stdout

将日志消息定向到日志文件

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=C:\logging.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

将日志消息定向到标准输出

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

尝试同时使用控制台和 file.If 进行日志记录,您在控制台中看到了一些东西,但没有看到创建的文件,然后确保您的程序对您的日志目录具有写入权限

感谢大家的帮助。我终于成功了。

如果其他人 运行 遇到同样的问题,log4j.properties 文件看起来像这样。

#Root logger option
log4j.rootLogger=DEBUG, stdout, file
# Redirect log messages to console
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{[dd.MM.yyyy] [HH:mm:ss]} %p [%t] %c (%F:%L) - %m%n
# Redirect log messages to a log file, support file rolling.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=myLog.log
log4j.appender.file.MaxFileSize=1MB
log4j.appender.file.MaxBackupIndex=3
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.conversionPattern=%d{[dd.MM.yyyy] [HH:mm:ss]} %p [%t] %c (%F:%L) - %m%n

我觉得 log4j.properties 中有重复的行。
一旦删除其中之一并检查
log4j.rootLogger=INFO, con