0

我正在与昨天的一些事情作斗争。

我想在java中记录一个webapp(WAR)。

我创建一个日志,附加一个 FileHandler,然后发送日志消息。但是,就像我们都知道的那样,文件处理程序会一直锁定新文件,直到我调用 fush() 和 close(),所以,当我重新部署战争时(或者如果我在开发中运行它,我会继续部署应用程序)它每次部署创建一个文件(丑陋)。

所以,我试图避免这种行为,(我不确定它是否是通过这种方式完成的,也许每次打开和关闭文件都很昂贵,我不确定)但我想附加处理程序并刷新/close 每次 Logger 记录消息时。(所以我只有一个文件)。

但我没有找到任何方法来做到这一点。我尝试扩展一个 java.util.Logger 类并且很难......(并且 - 建议反对 - 一些人)。

有人对我该如何解决这种情况有任何线索?

提前致谢!

public class LogUtil {

public static String name = "app%g.log";

public static Logger obtenerLogger(String eid, String path, Level levelToLog) {
    Logger logger = Logger.getLogger(eid);
    if (levelToLog != null) {
        logger.setLevel(levelToLog);
    }

    //I create the folder if not exist
    File dirFile = new File(path);
    if (!dirFile.exists()) {
        dirFile.mkdirs();
    }

    //I remove the handlers and close after each logg call (doing this i can use the same file lof after log)
    for (Handler handler : logger.getHandlers()) {
        logger.removeHandler(handler);
        handler.close();
        handler.flush();
    }

    //I Create the FileHandler 
    FileHandler f;
    try {
        f = new FileHandler(
                path + name, //pattern
                10485760, //limit
                3, // count
                true); //append
        //f.setFormatter(new SimpleFormatter());
        f.setFormatter(new MyFormatter());
        f.setLevel(levelToLog);
    } catch (Exception ex) {
        return null;
    }

    logger.addHandler(new ConsoleHandler());
    logger.addHandler(f);

    return logger;
}

PD1:但是在重新部署战争时,我调用了记录器类,它创建了一个新的记录器,但最后一个保持关闭。这就是困扰我的事情(我认为)

4

2 回答 2

0

答案就在这里:How to create the log file for each record in a specific format using java util logging framework

我必须扩展一个处理程序并重新实现发布方法。(我试图实现 Logger 类以在每次日志调用后关闭。不要那样做!jeje)。

感谢您的兴趣!

于 2017-09-19T14:15:16.530 回答
0

我创建一个日志,附加一个 FileHandler,然后发送日志消息。但是,就像我们都知道的那样,文件处理程序会一直锁定新文件,直到我调用 fush() 和 close(),所以,当我重新部署战争时(或者如果我在开发中运行它,我会继续部署应用程序)它每次部署创建一个文件(丑陋)。

如果您以编程方式设置记录器树和处理程序,则应实现自定义ServletContextListener并将其注册到您的 Web 应用程序。这是一个例子

还要确保你对你的记录器有很强的参考

于 2017-09-19T14:29:19.613 回答