我已经创建了一个应用程序并将其导出为jar文件。
如果jar应用程序由于某种原因崩溃,我希望它生成一个包含错误的崩溃日志文本文件。
如果我在Eclipse中运行应用程序,那么eclipse总是告诉我崩溃的位置,我可以在文本文件中获得相同类型的消息,而不是将应用程序作为jar运行吗?
我输入以下命令运行我的jar文件: java -jar MyApplication.jar
我可以在此命令中添加一些内容,以便在发生崩溃时生成崩溃日志吗?
谢谢!
答案 0 :(得分:4)
我最终使用了这个解决方案,它的工作原理与我想要的完全一样。 每次应用程序崩溃时,它都会将异常保存在名为“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();
}
}
});
答案 1 :(得分:0)
您可以使用log4j
等日志框架简单的例子 爪哇
import org.apache.log4j.Logger;
import java.io.*;
import java.sql.SQLException;
import java.util.*;
public class log4jExample{
/* Get actual class name to be printed on */
static Logger log = Logger.getLogger(
log4jExample.class.getName());
public static void main(String[] args)
throws IOException,SQLException{
log.debug("Hello this is an debug message");
log.info("Hello this is an info message");
}
}
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
如果你想这样做without loging