1

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

有没有办法调整我的代码,以便我的代码中的任何意外异常都记录到输出文件中,关闭输出文件并退出?

一些代码以防万一

我有一个 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());

谢谢你。

4

1 回答 1

1

在代码的 finally{} 块中调用自定义记录器的 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();
}
于 2013-11-06T06:55:20.267 回答