如何让我的jar应用程序生成崩溃日志文件?

时间:2014-01-13 10:43:35

标签: java jar crash-reports

我已经创建了一个应用程序并将其导出为jar文件。

如果jar应用程序由于某种原因崩溃,我希望它生成一个包含错误的崩溃日志文本文件。

如果我在Eclipse中运行应用程序,那么eclipse总是告诉我崩溃的位置,我可以在文本文件中获得相同类型的消息,而不是将应用程序作为jar运行吗?

我输入以下命令运行我的jar文件: java -jar MyApplication.jar

我可以在此命令中添加一些内容,以便在发生崩溃时生成崩溃日志吗?

谢谢!

2 个答案:

答案 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