java - 日志分析: finding lines by time difference

标签 java multithreading logging log-analysis otroslogviewer

我有一个用 log4j 生成的长日志文件,10 个 threads 写入日志。 我正在寻找日志分析器工具,它可以找到用户等待很长时间的行(即同一线程的日志条目之间的差异超过一分钟)。

P.S 我正在尝试使用 OtrosLogViewer,但它会按某些值(例如,按线程 ID)进行过滤,并且不会在行之间进行比较。

公务员事务局 新版本的 OtrosLogViewer 有一个“Delta”列,用于计算 adj 日志行之间的差异(以毫秒为单位)

谢谢

最佳答案

这个简单的 Python 脚本可能就足够了。为了测试,我分析了我的本地 Apache 日志,BTW 使用 Common Log Format所以你甚至可以按原样重复使用它。我简单地计算两个后续请求之间的差异,并打印超过特定阈值(在我的测试中为 1 秒)的增量的请求行。您可能希望将代码封装在一个函数中,该函数也接受带有线程 ID 的参数,以便您可以进一步过滤

#!/usr/bin/env python
import re
from datetime import datetime

THRESHOLD = 1

last = None
for line in open("/var/log/apache2/access.log"):
    # You may insert here something like
    # if not re.match(THREAD_ID, line):
    #   continue
    # Python does not support %z, hence the [:-6]
    current = datetime.strptime(
        re.search(r"\[([^]]+)]", line).group(1)[:-6],
        "%d/%b/%Y:%H:%M:%S")
    if last != None and (current - last).seconds > THRESHOLD:
        print re.search('"([^"]+)"', line).group(1)
    last = current

关于java - 日志分析: finding lines by time difference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12199663/

相关文章:

java - 指定范围内没有适用于 > javax.jdo :jdo-api:jar:[3. 0, 4.0) 的版本

java - 用于在不使用控制逻辑的情况下执行算术运算的通用 Java 代码

java - 如果我们记录一个对象的不可变性,我们能否将其视为不可变的?

bash - 如何同时在 BASH 中创建带时间戳的日志和错误句柄?

Java Logger 未记录到 Netbeans 中的输出

java - 如何配置MySQL JDBC驱动程序mysql-connector-java-5.1.12?

c++ - free() 阻塞其他线程,系统变慢

java - 修改 UI 线程 View 时 Android UI 不会崩溃

c - 如何使用 pthread 在线程之间同步,其中一个是计时器?

c# - 如何消除 log4net 中的重复日志记录?