首页 > 解决方案 > 如何将错误或异常写入以日期命名的日志文件?

问题描述

我已经写了一个代码。但是我发现每次将错误写入日志文件时,它都会完全覆盖现有文件,而不是附加在它之后。发生了什么...

try {
            int s = 1 / 0;
        } catch (Exception e) {
            try {
                Date d = new Date();
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                SimpleDateFormat sd = new SimpleDateFormat("yyyy_MM_dd");
                String s = sdf.format(d);
                String day = sd.format(d);

                PrintStream ps = new PrintStream("src/log/"+day+"_Exception.log");
                ps.println(s);

                System.setErr(ps);
            } catch (Exception e2) {
            }
            e.printStackTrace(System.err);
        }

标签: java

解决方案


当一个PrintStreamString参数的新创建时,该参数被解释为一个新FileOutputStream创建的路径。

所以句子:

PrintStream ps = new PrintStream("src/log/"+day+"_Exception.log");

基本上使用默认的“附加”标志创建一个新FileOutputStream的,即false.

要实现你想要的附加,你必须修改你的代码如下:

try {
    int s = 1 / 0;
} catch (Exception e) {
    try {
        Date d = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        SimpleDateFormat sd = new SimpleDateFormat("yyyy_MM_dd");
        String s = sdf.format(d);
        String day = sd.format(d);

        FileOutputStream fos = new FileOutputStream("src/log/" + day + "_Exception.log");
        PrintStream ps = new PrintStream(fos);

        ps.println(s);

        System.setErr(ps);
    } catch (Exception e2) {
    }
    e.printStackTrace(System.err);
}

推荐阅读