【问题标题】:How to create two log files如何创建两个日志文件
【发布时间】:2021-01-01 02:41:26
【问题描述】:

我有以下 log4j.properties 文件:

log.path=/var/log/MyApp


log4j.rootLogger=INFO, file

log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File = MyApp.log
log4j.appender.file.Append = true
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=1000
log4j.appender.file.DatePattern = '.'yyy-MM-dd
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern =%d{yyyy-MM-dd HH:mm:ss} %t/%c{1} [%p] %m%n

当我运行 MyApp 时,我获得了 MyApp.log 文件。我想知道是否可以在代码中为两个主类设置两个文件?类似:

object MyApp1 {
  def main(args: Array[String]) = {
    log4j.setName("File" -> "MyApp1.log")
    println("HelloWorld")
  }
}
object MyApp2 {
  def main(args: Array[String]) = {
    log4j.setName("File" -> "MyApp2.log")
    println("HelloWorld")
  }
}

然后,当我运行 Myapp1 时,它将创建 Myapp1.log,当我运行 Myapp2 时,它将创建 Myapp2.log

【问题讨论】:

标签: java scala log4j


【解决方案1】:

文件名可以在log4j.properties文件中参数化并作为JVM参数传递,

log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File = ${ApplicationName}.log

可以将 ApplicationName 作为带有实际文件名的 JVM 参数传递,

-DApplicationName=Myapp1

两个应用程序可以共享相同的 log4j.properties 文件,您可以在每个应用程序的 JVM 参数中传递应用程序名称。

【讨论】:

    【解决方案2】:

    您可以像这样为单个类配置日志文件 -

    log4j.logger.com.logger.test.logger_test.MyApp1=DEBUG, appender1
    log4j.additivity.com.logger.test.logger_test.MyApp1=false
    log4j.appender.appender1=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.appender1.File=logs/MyApp1.log
    log4j.appender.appender1.layout=org.apache.log4j.PatternLayout
    
    log4j.logger.com.logger.test.logger_test.MyApp2=DEBUG, appender2
    log4j.additivity.com.logger.test.logger_test.MyApp2=false
    log4j.appender.appender2=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.appender2.File=logs/MyApp2.log
    log4j.appender.appender2.layout=org.apache.log4j.PatternLayout
    

    示例:

    public class Myapp1 {
            
        Logger logger = Logger.getLogger(Myapp1.class);
            
        public Myapp1() {
            logger.debug("In Myapp1");
        }
    }
            
    public class Myapp2 {
        Logger logger = Logger.getLogger(Myapp2.class);
            
        public Myapp2() {
            logger.debug("In Myapp2");
        }
    }
            
    public class App {
        public static void main( String[] args ){
            Myapp1 myapp1 = new Myapp1();
            Myapp2 myapp2 = new Myapp2();
        }
    }
    

    【讨论】:

    • 它创建了两个日志文件,但我在日志文件中没有任何内容。我无法将日志添加到文件中
    • 您是否相应地更改了包名称com.logger.test.logger_test 应该是您的包名称。我测试了这段代码,它可以工作。
    猜你喜欢
    • 2013-12-31
    • 2014-04-10
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 2015-04-05
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多