我是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);
}
}
}
}
答案 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。这是一个很好的日志框架。