如何仅从Java日志文件中提取错误日志?

时间:2019-03-01 12:59:50

标签: java logging

我正在使用日志监视应用程序,我只需要从名为CATALINA.OUT的文件中获取错误级别的日志。有这么多的日志,只有我需要从中获取错误日志级别[整个异常]。请为此提供帮助。

3 个答案:

答案 0 :(得分:0)

假设您使用的是Linux,则可以像这样从终端上使用grep

$ grep 'ERROR' CATALINA.OUT

来自$ man grep

  

grep在每个文件中搜索PATTERN。文件“-”代表   标准输入。如果未提供文件,则递归搜索将检查   工作目录和非递归搜索读取标准输入。通过   默认情况下,grep打印出匹配的行。

答案 1 :(得分:0)

要在运行时观看:

$ tail -f /var/log/tomcat8/catalina.out | grep 'ERROR'

答案 2 :(得分:0)

我提出了一种高级方法来处理此问题(假设您无权访问记录器配置)

  1. 观察日志记录的模式(通常是相同的,所以我使用了jboss日志):
  

09:42:55,142调试[org.jboss.as.config](MSC服务线程1-6)已配置的系统属性...

因此,区分何时开始新日志记录的模式是:

  

TIME] [space] [LOG_LEVEL] [space] [classeName] [space] [thread] [message

  1. 实现读者

为简单起见,我建议您将日志记录保存到列表中。

下面为您的读者提供一个简单的算法:

open stream While end of log file is not reach reading if the line starts with the pattern “TIME][space][LOG_LEVEL…” then extract the log level of what you read until now if logLevel equals error then persist what I read until now excluding the current line create a new log record object else clear your log record object endif endif Store the current line into your log record object End of while close stream

在您的应用程序中,要求用户加载日志文件,您只需执行阅读器并显示结果即可。

有很多实现阅读器的方法,因此,如果要实现概念证明,只需在Java中创建一个阅读器即可逐行读取,例如:java 8 stream read a file line by line

在工作时,您可以观察到日志,准确记录您所需要的摘录...