在java中记录异常时指定文件名和路径的位置?

时间:2012-06-07 19:27:09

标签: java

我是java的新手,并试图通过示例学习如何记录异常。我在这里找到了以下示例代码:

http://www.kodejava.org/examples/447.html

但是,我没有看到指定日志文件的文件名。当我在Google上研究这个问题时,人们通常会参考用于编程java的框架来确定日志文件的存储位置。但是,我没有使用框架。我只是从命令行使用VIM编辑器创建我的java文件。 java文件位于Linux CentOS应用程序服务器上,并从客户端的浏览器调用。

问题1:是否可以修改以下示例以包含用于记录的文件名和路径?或者,我是否会偏离这个问题?

问题2:即使我记录了异常,它仍然会传播到客户端供用户查看吗?希望它会,否则用户将不会知道发生了错误。

package org.kodejava.example.util.logging;

import java.util.logging.Logger;
import java.util.logging.Level;
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.text.ParseException;

public class LoggingException {
private static Logger logger = Logger.getLogger(LoggingException.class.getName());

public static void main(String[] args) {
    DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
    df.setLenient(false);

    try {
        //
        // Try to parsing a wrong date.
        //
        Date date = df.parse("12/30/1990");

        System.out.println("Date = " + date);
    } catch (ParseException e) {
        //
        // Create a Level.SEVERE logging message
        //
        if (logger.isLoggable(Level.SEVERE)) {
            logger.log(Level.SEVERE, "Error parsing date", e);
        }
    }
}
}

3 个答案:

答案 0 :(得分:2)

试试这个:

try {
    FileHandler handler = new FileHandler("myLogFile.log", true);
    Logger logger = Logger.getLogger(LoggingException.class.getName());
    logger.addHandler(handler);
} catch (IOException e) {
    logger.log(Level.SEVERE, "Error parsing date", e);
}

默认情况下,文件处理程序会在每次创建日志文件时覆盖日志文件的内容。您可能还想附加日志文件,因此在FileHandler构造函数中,您需要将true指定为第二个参数。

希望这有帮助。

修改

package org.kodejava.example.util.logging;

import java.util.logging.Logger;
import java.util.logging.Level;
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.text.ParseException;

public class LoggingException {
private static Logger logger = Logger.getLogger(LoggingException.class.getName());

public static void main(String[] args) {
    DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
    df.setLenient(false);
    FileHandler handler = new FileHandler("myLogFile.log", true);
    logger.addHandler(handler);
    try {
        //
        // Try to parsing a wrong date.
        //
        Date date = df.parse("12/30/1990");

        System.out.println("Date = " + date);
    } catch (ParseException e) {
        //
        // Create a Level.SEVERE logging message
        //
        if (logger.isLoggable(Level.SEVERE)) {
            logger.log(Level.SEVERE, "Error parsing date", e);
        }
    }
  }
}

这应该有效。我没有测试它。 更有效的方法是创建一个初始化logger并为其添加处理程序的方法。但我会建议你考虑使用log4j。它易于设置和广泛使用的日志框架。

答案 1 :(得分:1)

您需要附加到日志的FileHandler,您可以在初始化的某个位置手动添加,或使用.properties文件配置日志记录。

(p.s。此示例中的isLoggable调用是多余的,只会使代码膨胀)

答案 2 :(得分:1)

在配置中为记录器添加文件处理程序。 链接:http://www.crazysquirrel.com/computing/java/logging.jspx

handlers = java.util.logging.ConsoleHandler, java.util.logging.FileHandler

最好使用log4j。这是一个很好的日志框架。