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



我使用了logger对象和add文件处理程序来记录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:352t" + e.toString());

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

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

您正在使用一个相对路径,该路径在当前目录更改时被更改。使用绝对路径,FileHandler模式,或者在启动器中设置当前目录。

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

将处理程序添加到根日志记录器,而不是指定的日志记录器。您可以通过提供日志记录来实现这一点。属性或配置类

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);

相关内容

最新更新