【问题标题】:How to design simple Log analyser in java如何在java中设计简单的日志分析器
【发布时间】:2021-07-10 18:14:36
【问题描述】:

我想设计一个日志分析器,我将在其中向 java 程序提供 application.log 文件,它将 解析日志文件并尝试捕获几个字段,如时间、IP 地址、状态代码(200/401/500 等)、请求类型(GET/POST/PUT 等)等。我想将它存储在我的某个数据库中以后可以用它来做一些分析。

我有几个问题需要进一步了解。

  1. java 中有没有用于解析日志文件的实用程序?
  2. 我应该使用 sql 还是不使用 sql DB 来存储这些数据?
  3. 如何处理解析 500 MB 这样的大文件?
  4. 我应该使用多线程来更快地读取文件吗?

文件的样本输入可以是

84.55.41.57 - - [16/Apr/2016:20:21:56 +0100] "GET /john/assets/js/skel.min.js HTTP/1.1" 200 3532 "http://www.example.com/john/index.php" "Mozilla/5.0 (Windows NT 6.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0"
84.55.41.57 - - [16/Apr/2016:20:21:56 +0100] "GET /john/images/pic01.jpg HTTP/1.1" 200 9501 "http://www.example.com/john/index.php" "Mozilla/5.0 (Windows NT 6.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0"
84.55.41.57 - - [16/Apr/2016:20:21:56 +0100] "GET /john/images/pic03.jpg HTTP/1.1" 200 5593 "http://www.example.com/john/index.php" "Mozilla/5.0 (Windows NT 6.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0"

  

【问题讨论】:

    标签: java spring-boot logging log-analysis


    【解决方案1】:
    1. java 中有没有用于解析日志文件的实用程序?

    是的,如果您已经知道日志的格式,您可以使用简单的 Regex(java.util.regex.Pattern API) 来解析行。如果您的用例很复杂,您可以使用 AWSStats 甚至 logstash。

    1. 我应该使用 sql 还是不使用 sql DB 来存储这些数据?

    没有直接的答案。这取决于您的用例(读/写、复制等)

    1. 如何处理解析 500 MB 这样的大文件?

    Java 的 FileInputStream 能够读取任意大小的文件

    1. 我应该使用多线程来更快地读取文件吗?

    我认为您不能使用多线程来读取单个文件而不拆分它。但是,您可以运行多个线程来解析单独的文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-12
      • 1970-01-01
      • 1970-01-01
      • 2011-01-26
      • 1970-01-01
      • 2013-02-26
      • 1970-01-01
      相关资源
      最近更新 更多