【问题标题】:Write Logs to a .log/.txt file using Logger Java使用 Logger Java 将日志写入 .log/.txt 文件
【发布时间】:2019-01-08 18:43:27
【问题描述】:

我制作了一个日志系统,但我需要将日志消息写入单独的日志/txt 文件中。

我想出了这个:

public class UIRestService {

    private static final Logger LOGGER = Logger.getLogger(UIRestService.class.toString());

    FileHandler fh;

    public UIRestService() {
        try {
            fh = new FileHandler("E:/MyLog.log");
            LOGGER.addHandler(fh);
            SimpleFormatter formatter = new SimpleFormatter();
            fh.setFormatter(formatter);
        } catch (IOException e){
            e.printStackTrace();
        }
    }
    public MainDTO registerEORI(@RequestBody EoriRegistration json){
        long startTime = System.currentTimeMillis();
        try {
            LOGGER.info("--- Start EORI registration ---");
            EoriData entity = Converter.convertDTO2Entity(json);
            LOGGER.info("Converted DTO to Entity");
            MainDTO dto = dataManager.registration(entity);
            if (dto instanceof EoriRegistration) {
                msgManager.writeMsg(json.getState(), json.getC8_number() == null ? "test" : json.getC8_number());//TODO remove after IAM json.getC8_number()
            }
            return dto;
        } catch (Exception e){
            LOGGER.info("Exception in registerEORI");
            e.printStackTrace();
            Error error = new Error(Constants.TYPE_DTO2);
            error.setErrorDescription(e.getMessage());
            LOGGER.info("Exception in registerEORI" + error);
            return error;
        } finally {
            long endTime = System.currentTimeMillis();
            LOGGER.info("Registering EORI id: " + json.getId() + " , eori number:" + json.getEoriNumber() + " , elapsed:" + (endTime - startTime));
        }
    }

}

我在 E:/ 中手动创建了 MyLog.log 文件,但什么也没有。我尝试了没有手动创建的文件 - 再次没有。它说从不使用构造函数。你能告诉我我做错了什么吗?我用了这个例子 - Example

【问题讨论】:

  • 如果您手动将public UIRestService() 替换为static
  • 等等,你什么意思?
  • 抱歉,我刚刚在服务构造函数中看到了一个静态 LOGGER 和一个初始化。没有多想,我提出了一个静态初始化器static { ... }。我也会先调用 setFomatter,然后再调用 addHandler。但这一切似乎都不太可能导致问题。
  • BTW 看不到日志消息时最常见的错误是错误的日志级别。上面应该是 INFO 或更少。
  • 也许我解释得不够好。我在控制台中看到日志消息,但我需要同时将它们写入日志/txt 文件中 - 因此不会发生在文件中的写入本身。文件为空。

标签: java spring logging


【解决方案1】:

我认为您必须设置日志级别。

LOGGER.setLevel(Level.INFO)

我总是按照 vogella.com (http://www.vogella.com/tutorials/Logging/article.html#logexample_createLogger) 的教程初始化我的 Logger,它们工作正常:

    Logger logger = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);

    // suppress the logging output to the console
    Logger rootLogger = Logger.*getLogger*("");
    Handler[] handlers = rootLogger.getHandlers();
    if (handlers[0] instanceof ConsoleHandler) {
        rootLogger.removeHandler(handlers[0]);
    }

    logger.setLevel(Level.INFO);
    fileTxt = new FileHandler("Logging.txt");
    fileHTML = new FileHandler("Logging.html");

    // create a TXT formatter
    formatterTxt = new SimpleFormatter();
    fileTxt.setFormatter(formatterTxt);
    logger.addHandler(fileTxt);

(来源:http://www.vogella.com/tutorials/Logging/article.html#logexample_createLogger

【讨论】:

  • 我不确定你的意思。我不建议使用构造函数。您是否尝试根据上面的链接修改您的代码?
  • 我从java中的默认登录更改为log4j,现在一切都很好。
猜你喜欢
  • 1970-01-01
  • 2020-06-27
  • 1970-01-01
  • 1970-01-01
  • 2012-12-02
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 2013-06-23
相关资源
最近更新 更多