Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使我的jar应用程序生成崩溃日志文件?_Java_Jar_Crash Reports - Fatal编程技术网

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

Java 如何使我的jar应用程序生成崩溃日志文件?,java,jar,crash-reports,Java,Jar,Crash Reports,我制作了一个应用程序,并将其导出为jar文件 如果jar应用程序由于某种原因崩溃,我希望它生成一个带有错误的崩溃日志文本文件 如果我在Eclipse中运行应用程序,那么Eclipse总是告诉我它在哪里崩溃,那么当作为jar运行应用程序时,我可以在文本文件中获得相同类型的消息吗 我通过键入以下命令来运行我的jar文件: java-jarmyapplication.jar 如果发生崩溃,我是否可以在此命令中添加一些内容以生成崩溃日志 谢谢 您可以像这样使用日志框架 简单例子 爪哇 log4j.pro

我制作了一个应用程序,并将其导出为jar文件

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

如果我在Eclipse中运行应用程序,那么Eclipse总是告诉我它在哪里崩溃,那么当作为jar运行应用程序时,我可以在文本文件中获得相同类型的消息吗

我通过键入以下命令来运行我的jar文件: java-jarmyapplication.jar

如果发生崩溃,我是否可以在此命令中添加一些内容以生成崩溃日志


谢谢

您可以像这样使用日志框架

简单例子 爪哇

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是否有其他方法记录崩溃,而无需对所有可能崩溃的内容添加“尝试并捕获”检查?