Java 如何使我的jar应用程序生成崩溃日志文件?
我制作了一个应用程序,并将其导出为jar文件 如果jar应用程序由于某种原因崩溃,我希望它生成一个带有错误的崩溃日志文本文件 如果我在Eclipse中运行应用程序,那么Eclipse总是告诉我它在哪里崩溃,那么当作为jar运行应用程序时,我可以在文本文件中获得相同类型的消息吗 我通过键入以下命令来运行我的jar文件: java-jarmyapplication.jar 如果发生崩溃,我是否可以在此命令中添加一些内容以生成崩溃日志Java 如何使我的jar应用程序生成崩溃日志文件?,java,jar,crash-reports,Java,Jar,Crash Reports,我制作了一个应用程序,并将其导出为jar文件 如果jar应用程序由于某种原因崩溃,我希望它生成一个带有错误的崩溃日志文本文件 如果我在Eclipse中运行应用程序,那么Eclipse总是告诉我它在哪里崩溃,那么当作为jar运行应用程序时,我可以在文本文件中获得相同类型的消息吗 我通过键入以下命令来运行我的jar文件: java-jarmyapplication.jar 如果发生崩溃,我是否可以在此命令中添加一些内容以生成崩溃日志 谢谢 您可以像这样使用日志框架 简单例子 爪哇 log4j.pro
谢谢 您可以像这样使用日志框架 简单例子 爪哇 log4j.properties
# Define the root logger with appender file
log = /usr/home/log4j
log4j.rootLogger = DEBUG, FILE
# Define the file appender
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=${log}/log.out
# Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n
如果您想这样做,您可以使用日志框架,如 简单例子 爪哇 log4j.properties
# Define the root logger with appender file
log = /usr/home/log4j
log4j.rootLogger = DEBUG, FILE
# Define the file appender
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=${log}/log.out
# Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n
如果你想这样做我最终使用了这个解决方案,它的工作原理与我希望的完全一样。 每次应用程序崩溃时,它都会将异常保存在名为crashlogs的子文件夹中的文本文件中,文件名为日期和时间 刚刚在我的主函数的开头添加了这段代码
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");
String filename = "crashlogs/"+sdf.format(cal.getTime())+".txt";
PrintStream writer;
try {
writer = new PrintStream(filename, "UTF-8");
writer.println(e.getClass() + ": " + e.getMessage());
for (int i = 0; i < e.getStackTrace().length; i++) {
writer.println(e.getStackTrace()[i].toString());
}
} catch (FileNotFoundException | UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
我最终使用了这个解决方案,它的工作原理和我希望的完全一样。 每次应用程序崩溃时,它都会将异常保存在名为crashlogs的子文件夹中的文本文件中,文件名为日期和时间 刚刚在我的主函数的开头添加了这段代码
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");
String filename = "crashlogs/"+sdf.format(cal.getTime())+".txt";
PrintStream writer;
try {
writer = new PrintStream(filename, "UTF-8");
writer.println(e.getClass() + ": " + e.getMessage());
for (int i = 0; i < e.getStackTrace().length; i++) {
writer.println(e.getStackTrace()[i].toString());
}
} catch (FileNotFoundException | UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
您可以使用日志框架。阅读此问题是的,您可以将日志重定向到您选择的特定驱动器或位置。@lakshman是否有另一种方法记录崩溃,而不必对可能崩溃的所有内容添加try-and-catch检查?您可以使用日志框架。阅读此问题是的,您可以将日志重定向到您选择的特定驱动器或位置。@lakshman是否有其他方法记录崩溃,而无需对所有可能崩溃的内容添加“尝试并捕获”检查?