如何解决我在 Java 中遇到的异常日志问题?

问题描述

我使用了记录器对象并添加文件处理程序来在 Java 项目的日志文件中记录异常。它工作正常,当我从 NetBeans IDE 运行它时,但是当我从控制台将它作为独立应用程序运行时,异常会记录在控制台中,甚至没有在我指定的位置创建文件

private static final Logger LOGGER = Logger.getLogger(BuyerRegistration.class.getName());

    public static void main(String args[]) {
        
        Formatter simpleFormatter = null;
        Handler fileHandler = null;
        try {
            LOGGER.setUseParentHandlers(false);
            fileHandler = new FileHandler("dist/lib/CurryHouse.log",true);
            simpleFormatter = new SimpleFormatter();
            LOGGER.addHandler(fileHandler);
            fileHandler.setFormatter(simpleFormatter);
            fileHandler.setLevel(Level.ALL);
            LOGGER.setLevel(Level.ALL);
        } catch (IOException exception) {
            LOGGER.log(Level.SEVERE,"Error occur in FileHandler.",exception);
        }

以上代码将出现在一个BuyerRegistration 类中。此外,我在所有 catch 块中附加了以下代码以在文件中记录异常。

LOGGER.log(Level.SEVERE,"{0}\n","Bills:352\t" + e.toString());

我希望代码在我指定的位置记录所有异常,而不是在控制台中记录

解决方法

我从控制台将它作为独立应用程序运行,异常记录在控制台中,甚至没有在我指定的位置创建文件。

您正在使用一个 relative path,当当前目录改变时它也会改变。使用绝对路径 a FileHandler pattern,或在启动器中设置当前目录。

我希望代码在我指定的位置记录所有异常,而不是在控制台中记录

将您的处理程序添加到根记录器而不是您命名的记录器。您可以通过提供 logging.properties or a config class 来做到这一点。

private static final Logger ROOT = Logger.getLogger("");
static {
    Formatter simpleFormatter = null;
    Handler fileHandler = null;
    try {
        //TODO: Fix file path
        fileHandler = new FileHandler("%h/CurryHouse.log",true);
        simpleFormatter = new SimpleFormatter();
        LOGGER.addHandler(fileHandler);
        fileHandler.setFormatter(simpleFormatter);
        fileHandler.setLevel(Level.ALL);
        ROOT.addHandler(fileHandler);
    } catch (IOException exception) {
        LOGGER.log(Level.SEVERE,"Error occur in FileHandler.",exception);
    }
}

public static void main(String args[]) {
   //Your app.
}

此外,我在所有 catch 块中附加了以下代码以在文件中记录异常。

您可能需要考虑记录完整的堆栈跟踪:

LOGGER.log(Level.SEVERE,"Bills:352",e);

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...