【问题标题】:When to close the FileHandler using java logging with a running jetty server何时使用运行中的码头服务器的 java 日志记录关闭 FileHandler
【发布时间】:2015-07-23 08:21:53
【问题描述】:

我有一个使用 jetty 作为 Web 服务器的 Java 控制台应用程序,该应用程序将一直运行,直到用户关闭控制台窗口(在 Windows 操作系统上,它是运行 java -jar xxx.jar 命令的 cmd 窗口)

public static void main(String[] args) {
        Server server = new Server();

        // some code to config server

        try {
            server.start();
            server.join();
        } catch (Throwable t) {
            t.printStackTrace(System.err);
        }
    }

我还使用 java 日志将日志类实现为单例,因此我可以使用它来记录应用程序中的任何事件。 问题是,我使用java.util.logging.FileHandler 作为日志文件处理程序

FileHandler fileHandler = new FileHandler(".\testlog.log");
fileHandler.setLevel(Level.INFO);
logger.addHandler(fileHandler);

每当我运行应用程序时,都会与日志文件一起创建一个testlog.log.lck 文件,并且在应用程序停止后不会消失。

我知道这个.lck 文件应该在文件处理程序关闭后消失,但我不知道我应该何时何地关闭fileHandler,因为我的应用程序不知道它何时会关闭被用户终止。

我尝试了Runtime.getRuntime().addShutdownHook(),但没有运气,我认为 addShutdownHook 调用得太晚以至于记录器对象已经被销毁。

谁能给我一些关于如何处理剩余的.lck 文件和日志的想法,或者我应该在哪里调用fileHandler.close()

【问题讨论】:

    标签: java logging jetty filehandle


    【解决方案1】:

    java.util.logging 及其java.util.logging.FileHandler 为您处理。

    java.util.logging.FileHandler 的典型设置不使用您控制或设置的 java.io.File 引用。 java.util.logging.FileHandler 使用模式和翻转行为根据您的模式移动到新文件。这意味着打开和活动的文件将被锁定,最终将在模式指示或 JVM 退出时创建一个新文件。

    【讨论】:

    • 但是每次我用 X 按钮关闭控制台窗口时,我都会在日志文件夹中留下 .lck 文件,文件消失的唯一情况是使用双 ctrl+C。
    • Thjen 我怀疑关闭控制台窗口不会杀死 JVM。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 2016-12-26
    • 2012-05-13
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    相关资源
    最近更新 更多