【问题标题】:log4j two loggers with separate fileslog4j 两个具有单独文件的记录器
【发布时间】:2025-12-04 09:50:01
【问题描述】:

在我的程序中,我有 2 个记录器,现在我必须将它们保存到文件中,但没有创建文件。

log4j.rootLogger=arcLog, errorLog, INFO

#ARC-logger properties
log4j.appender.arcLog=org.apache.log4j.FileAppender
log4j.appender.arcLog.File=logs/ARC-1Logger.log
log4j.appender.arcLog.Append=true
log4j.appender.arcLog.maxFileSize=5MB
log4j.appender.arcLog.maxBackupIndex=5
log4j.appender.arcLog.threshold=INFO
log4j.appender.arcLog.layout=org.apache.log4j.PatternLayout
log4j.appender.arcLog.layout.ConversionPattern=%d [%24F:%t:%L] - %m%n

log4j.appender.arcSLog=org.apache.log4j.FileAppender
log4j.appender.arcSLog.File=logs/ARC-Session_Logger.log
log4j.appender.arcSLog.Append=true
log4j.appender.arcSLog.maxFileSize=1024KB
log4j.appender.arcSLog.maxBackupIndex=5
log4j.appender.arcSLog.threshold=WARN
log4j.appender.arcSLog.layout=org.apache.log4j.PatternLayout
log4j.appender.arcSLog.layout.ConversionPattern=%d [%24F:%t:%L] - %m%n

log4j.category.arcLog=TRACE, ARC-Logger
log4j.additivity.arcLog=false

log4j.category.errorLog=WARN, ARC-Session_Logger
log4j.additivity.arcSLog=false

要获取我使用的记录器:

loggerF = Logger.getLogger("ARC-Logger");
loggerS = Logger.getLogger("ARC-Session_Logger");

Appenders 被发现,因为没有错误,但没有创建文件。 难道这个项目是我在另一个项目中与 Hibernate 一起使用的库,它也有另一个记录器?

【问题讨论】:

    标签: java file logging properties log4j


    【解决方案1】:

    我看到了一些不太对劲的地方。你的属性文件应该看起来更像这样:

    log4j.rootLogger=INFO, arcApp, arcSApp
    
    #ARC-logger properties
    log4j.appender.arcApp=org.apache.log4j.RollingFileAppender
    log4j.appender.arcApp.File=logs/ARC-1Logger.log
    log4j.appender.arcApp.Append=true
    log4j.appender.arcApp.maxFileSize=5MB
    log4j.appender.arcApp.maxBackupIndex=5
    log4j.appender.arcApp.threshold=INFO
    log4j.appender.arcApp.layout=org.apache.log4j.PatternLayout
    log4j.appender.arcApp.layout.ConversionPattern=%d [%24F:%t:%L] - %m%n
    
    log4j.appender.arcSApp=org.apache.log4j.RollingFileAppender
    log4j.appender.arcSApp.File=logs/ARC-Session_Logger.log
    log4j.appender.arcSApp.Append=true
    log4j.appender.arcSApp.maxFileSize=1024KB
    log4j.appender.arcSApp.maxBackupIndex=5
    log4j.appender.arcSApp.threshold=WARN
    log4j.appender.arcSApp.layout=org.apache.log4j.PatternLayout
    log4j.appender.arcSApp.layout.ConversionPattern=%d [%24F:%t:%L] - %m%n
    
    log4j.logger.arcLog=TRACE, arcApp
    log4j.additivity.arcLog=false
    
    log4j.logger.arcSLog=WARN, arcSApp
    log4j.additivity.arcSLog=false
    

    然后你应该能够像这样调用你的类:

    private static final Logger  loggerF = Logger.getLogger("arcLog");
    private static final Logger  loggerS = Logger.getLogger("arcSLog");
    

    我在您的属性中看到的几个问题:

    • arcLogarcSLog 是附加程序,而不是记录程序,这可能会让您感到困惑。
    • 如果您想使用maxFileSizemaxBackupIndex,您需要的是RollingFileAppender,而不是FileAppender
    • 在 rootLogger 属性中,您应该首先定义级别,然后是附加程序。
    • 当您实际创建记录器时,它位于log4j.logger.arcLog=TRACE, arcApp,您可以在其中定义记录器的级别和之前声明的附加程序。
    • 要在 Java 类中使用记录器,您需要调用记录器而不是附加器。

    【讨论】:

    • 它正在工作,但是如何在日志目录中的 exec 文件位置下创建这些文件
    • 这取决于您的环境,例如,如果您在 tomcat 应用程序中工作,您可以使用属性 ${catalina.base} 来构建所需的相对路径。
    最近更新 更多