【问题标题】:Unable to create a file with log4j无法使用 log4j 创建文件
【发布时间】:2017-07-27 22:07:39
【问题描述】:

目前我的代码正在控制台上打印日志,但它没有使用日志创建文件。这是log4j.properties的代码:

log4j.rootLogger=file, stdout

log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=C:/logs/logging.log
log4j.appender.file.ImmediateFlush=true
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} %L - %m%n
log4j.appender.file.Append=true
log4j.appender.file.Threshold=INFO

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} %m%n

它在我的 spring 应用程序的资源文件夹中。 这就是我使用它的地方:

public void getPreviousDay() {
        PropertyConfigurator.configure("log4j.properties");
        logger = Logger.getLogger(LocationScheduler.class);
        logger.info("Test");
}

【问题讨论】:

    标签: java spring logging configuration


    【解决方案1】:

    您需要对log4j.properties 进行一些更改

    1. 首先log4j.rootLogger 指定日志级别,然后是附加程序。所以在你的情况下它必须是

      log4j.rootLogger= INFO, file, stdout

    2. 使用log4j.appender.file=org.apache.log4j.RollingFileAppender 代替log4j.appender.file=org.apache.log4j.FileAppender 以获得翻转日志文件。

    希望这会有所帮助。

    编辑

    您的程序似乎无法访问您的log4j.properties,原因是您用于加载它的方法只需要log4j.properties 的完全限定路径

    如果您想从类路径加载您的log4j.properties,请使用以下版本:

     PropertyConfigurator.configure(ClassLoader.getSystemResource("log4j.properties"));
    

    【讨论】:

    • 我尝试了您的建议并更正了我的代码,不幸的是它不起作用:(
    • 您确定您的 log4j.properties 可以加载吗?
    • 终于找到了答案,其实很简单。当我重命名文件时,我已将文件命名为 log4j.property,它创建了该文件。所以感谢您的帮助:)
    • 顺便说一下,你能给我一个提示,如何只将特定消息写入文件。我的意思是我不希望所有日志都只保存一个特定的字符串
    • 请单独提出一个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-17
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    • 1970-01-01
    • 2012-03-25
    相关资源
    最近更新 更多