【问题标题】:Logging different logs in different files. But all logs go in same file在不同的文件中记录不同的日志。但是所有日志都放在同一个文件中
【发布时间】:2020-06-04 13:22:05
【问题描述】:

我正在使用 java.util.logging 库进行日志记录。

我的代码如下:

package com.test.vesrionControlSystem.services;

import java.io.IOException;
import java.util.Date;
import java.util.logging.FileHandler;
import java.util.logging.Formatter;
import java.util.logging.LogRecord;
import java.util.logging.Logger;

public class TestMain {

    public static void main(String[] args) throws IOException, InterruptedException {
        // TODO Auto-generated method stub

        Logger logger = Logger.getLogger(TestMain.class.getName());
        Logger logger1= Logger.getLogger(TestMain.class.getName());
        FileHandler fh = new FileHandler("D:\\Logs\\FirstLogs.%g.log", 10000, 20, true);
        FileHandler fh1 = new FileHandler("F:\\Logs\\SecondLogs.%g.log", 10000, 20, true);
        fh.setFormatter(new Formatter() {

          @Override
          public String format(LogRecord record) {
            return new Date(record.getMillis()) + " " + record.getLevel() + ": " + record.getMessage() + "\n";
          }
        });

        fh1.setFormatter(new Formatter() {

              @Override
              public String format(LogRecord record) {
                return new Date(record.getMillis()) + " " + record.getLevel() + ": " + record.getMessage() + "\n";
              }
        });

        logger.addHandler(fh);
        logger1.addHandler(fh1);

        while(true) {
            logger.info("printing info");
            Thread.sleep(100);
            logger1.warning("printing warning");
            Thread.sleep(100);
            logger.severe("Printing error");
            Thread.sleep(100);
        }   
    }
}

此处信息和严重消息应打印在 firstLogs.log 文件中,而警告消息应打印在 secondsLogs.log 文件中。

但我在两个文件中都看到了所有三个消息(信息、警告和严重)。

请帮助我了解我在这里缺少什么。

【问题讨论】:

    标签: java file-io java.util.logging filehandler loggerfactory


    【解决方案1】:

    主要问题是loggerlogger1 在您的测试代码中名称相同。更改名称:

        Logger logger = Logger.getLogger(TestMain.class.getName() + ".0");
        Logger logger1= Logger.getLogger(TestMain.class.getName() + ".1");
    

    如果您想在同一个记录器中过滤,请参阅Logging handler usage

    【讨论】:

      【解决方案2】:

      它类似于我最近回答的一个,但它是针对 log4j 的。请查看How create diferents log File with different content using log4 in java configuration

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-02-15
        • 2017-12-23
        • 2020-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-14
        • 1970-01-01
        相关资源
        最近更新 更多