使用Java从日志文件中读取Stacktrace

时间:2017-07-27 08:37:48

标签: java stack-trace logfiles

我希望在日志文件中发生异常后打印所有行以及异常名称。以" at XYZ.ABC.( abcabcabc java:519)开头的行 直到Truncated. see log file for complete stacktrace。问题是它还会打印包含**** Error Wed Jul 05 22:23:30 GMT 2017 1499293410496**** Warning Wed Jul 05 22:23:30 GMT 2017 1499293410496的行。

我的代码

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStreamReader;



public class findException {


    public static void main(String[] args) 
    {
        try
        {
            FileInputStream fis = new FileInputStream("log path");
            DataInputStream dis = new DataInputStream(fis);
            BufferedReader br = new BufferedReader(new InputStreamReader(dis));
            BufferedWriter bw = new BufferedWriter(new FileWriter("Trace_failed.txt"));

            String strLine;
            Boolean check= false;
            int line = 0;

            while((strLine = br.readLine()) != null)
                    {
                        if(strLine.contains("Servlet failed with Exception")                                        || (strLine.contains("java.lang.Exception"))                                    || (strLine.contains("SQLException")))
                        {
                            check = true;
                        }
                        if(check)
                        {
                            bw.write(strLine);
                            bw.newLine();
                            line++;

                        }
                        if(!strLine.contains("Truncated. see log file for complete stacktrace"))
                        {
                            check = false;
                            line = 0;
                        }
                    }

            dis.close();
            bw.close();
            System.out.println("Written Successfully");


        }
        catch(Exception e)
        {
            System.err.println("Error  " + e.getMessage());
        }

    }

}

请向右滚动以查找所写的例外情况。我刚刚写了两篇。那么我该如何删除****Error...和* ***Warning...的所有行。 它在读取Truncated. see log file for complete stacktrace时停止循环 请帮助!!

1 个答案:

答案 0 :(得分:1)

最佳解决方案是使用标准日志记录解决方案 - 请参阅Log4J或Logback或其他一些现成的框架。它们提供了非常好的选项,可以将堆栈跟踪打印到日志文件中。可以与登录框架一起使用或不使用日志框架的另一个解决方案是使用我编写的开源库,该库提供了一个实用程序(在其他几个中)从异常中提取完整或过滤掉的栈跟踪到String。您所要做的就是:

String stacktraceStr = TextUtils.getStacktrace(ex);

这是一篇文章的链接,详细解释了从何处获取库或/及其源代码(maven或github)以及如何使用它:Open Source Java library with stack trace filtering, Silent String parsing Unicode converter and Version comparison。寻找段落“ Stacktrace噪音过滤器