gpt4 book ai didi

java - 如何在遇到未处理的异常时关闭 java 日志文件

转载 作者:太空宇宙 更新时间:2023-11-04 07:17:09 24 4
gpt4 key购买 nike

我目前正在开发一个 Java 项目,其中使用标准 Java 记录器(即 java.util.logging.Logger)。我发现当我遇到代码中未处理的意外异常时,我的程序会关闭,但记录器不会释放文本文件上的锁定。

是否有某种方法可以调整我的代码,以便将代码中的任何意外异常记录到输出文件中,关闭输出文件并退出?

一些相关的代码

我有一个 CustomLogging 类:

import java.io.IOException;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;

public class CustomLogging
{
static private FileHandler txtFileHandle;
static private SimpleFormatter formatterTxt;

static public void initalise() throws IOException
{
//Global logger configuration
Logger logger = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);

logger.setLevel(Level.INFO);
txtFileHandle = new FileHandler("Logging.txt");

formatterTxt = new SimpleFormatter();
txtFileHandle.setFormatter(formatterTxt);
logger.addHandler(txtFileHandle);
}

static public void shutdown() throws IOException
{
txtFileHandle.close();
}
}

CustomLogger 类的初始化方法在程序启动时在我的第一个 Java Swing GUI 的构造函数中调用:

public StartMenu() 
{
try
{
CustomLogging.initalise();
}
catch (Exception e)
{
//Placeholder, will fix this up
}
//Other code....
}

所有其他类都可以通过以下方式访问:

private final static Logger logger = Logger.getLogger(MyClassNameHere.class.getName());

谢谢。

最佳答案

在代码的 finally{} block 中调用自定义记录器的 shutdown() 方法

Logger.getLogger(MyClassNameHere.class.getName()); 

这不会返回您的 CustomLogging 实例。您的initialize()应该返回您的代码必须用于日志记录的记录器。

示例:

public class CustomLogging 
{
static private FileHandler txtFileHandle;
static private SimpleFormatter formatterTxt;

static public Logger getLogger(Class loggerClass) throws IOException
{
//Global logger configuration
Logger logger = Logger.getLogger(loggerClass);

logger.setLevel(Level.INFO);
txtFileHandle = new FileHandler("Logging.txt");

formatterTxt = new SimpleFormatter();
txtFileHandle.setFormatter(formatterTxt);
logger.addHandler(txtFileHandle);

return logger;
}

static public void shutdown() throws IOException
{
txtFileHandle.close();
}
}

像这样使用它:

CustomLogging logger = CustomLogging.getLogger(MyClassNameHere.class);

try{
logger.info("print in log");
}finally{
logger.shutdown();
}

关于java - 如何在遇到未处理的异常时关闭 java 日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19805774/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com