使用Java从日志文件读取Stacktrace
我想在日志文件中发生异常后打印所有行以及异常名称。在XYZ.ABC.(abcabc java:519) 直到使用Java从日志文件读取Stacktrace,java,stack-trace,logfiles,Java,Stack Trace,Logfiles,我想在日志文件中发生异常后打印所有行以及异常名称。在XYZ.ABC.(abcabc java:519) 直到被截断。有关完整的堆栈跟踪,请参阅日志文件。问题是它还打印了包含****错误Wed Jul 05 22:23:30 GMT 2017 1499293410496和****警告Wed Jul 05 22:23:30 GMT 2017 1499293410496的行 我的代码 import java.io.BufferedReader; import java.io.BufferedWrite
被截断。有关完整的堆栈跟踪,请参阅日志文件。问题是它还打印了包含****错误Wed Jul 05 22:23:30 GMT 2017 1499293410496
和****警告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());
}
}
}
请向右滚动查看写入的异常。我刚刚写入了其中的两行。那么,如何删除所有包含***错误…
和****警告…
的行呢。
当循环读取到被截断的时,我停止了循环。有关完整的堆栈跟踪,请参阅日志文件
请提供帮助!!最好的解决方案是使用标准日志记录解决方案-请参阅或Logback或其他一些现成的框架。它们提供了将StackTrace打印到日志文件的非常好的选项。另一个可以与日志记录框架一起使用或不与日志记录框架一起使用的解决方案是使用我编写的开源库,该库提供了将完整或过滤掉的stacktrace从exception提取到字符串中的实用性(以及其他一些功能)。您所要做的就是:
String stacktraceStr = TextUtils.getStacktrace(ex);
下面是一篇文章的链接,详细解释了从何处获取库或/及其源代码(maven或github)以及如何使用它:。请查找段落“Stacktrace noise filter”