【问题标题】:Java: How to make two loggers write in different files (Logger) [duplicate]Java:如何让两个记录器写入不同的文件(记录器)[重复]
【发布时间】:2016-12-18 20:24:05
【问题描述】:

我在同一个班级有 2 个记录器,设置如下:

Logger logger = Logger.getLogger("MyLog");  
FileHandler fh;  

try {  
    // This block configure the logger with handler and formatter  
    fh = new FileHandler("C:/temp/test/MyLogFile.log");  
    logger.addHandler(fh);
    SimpleFormatter formatter = new SimpleFormatter();  
    fh.setFormatter(formatter);  
    // the following statement is used to log any messages  
    logger.info("My first log");  
} catch (SecurityException e) {  
    e.printStackTrace();  
} catch (IOException e) {  
    e.printStackTrace();  
}  

第二个记录器的设置方式与logger2fh2MyLogFile2.log 相同。

我的问题是,每当记录任何记录器时,两个文件都会被写入,即使我只调用一个记录器,例如logger2.log(Level.INFO, "msg2").

这是为什么呢?是因为两个记录器同时打开吗?但我不想每次使用它们时都 .close()/创建它们。有更好的解决方案吗?

【问题讨论】:

  • log4j 和 java.util.logging.Logger 的工作方式相同吗?

标签: java logging file-handling


【解决方案1】:

您必须在此处为实例设置另一个名称:

Logger logger = Logger.getLogger("MyLog");

Logger logger2 = Logger.getLogger("MyLog2");

因为Logger.getLogger("MyLog") 返回一个名为“MyLog”的记录器实例,如果不存在则创建它

【讨论】:

  • 顺便说一下,用类或包命名记录器更常规:Logger log = Logger.getLogger(this.getClass());
  • 谢谢,我不知道这部分很重要,因为它看起来像一个名字。同一个包中的第二个记录器是否有命名约定? Logger.getLogger(this.getClass().getName() + "2"); ?
  • 因为在同一个类中有 2 个记录器是不常规的,所以根本不是:p
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-29
  • 2023-04-01
  • 1970-01-01
  • 2017-03-23
  • 2020-04-28
  • 2017-11-09
  • 1970-01-01
相关资源
最近更新 更多