方便的显示Apache日志更改后的新信息

本文介绍了一款用于简化Apache错误日志分析的Python脚本。该脚本能高效地对比两次运行间日志文件的变化,提取并展示新出现的错误、警告及通知信息,帮助用户快速定位问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看Apache的错误日志快看瞎我的眼睛了,因为如果直接打开看的话需要辨别如下信息:

  1. 哪些行是我这次的新信息
  2. 在新信息中错误/警告/提示的原因,相对应的文件名以及行数位置

为了更方便浏览日志,有了下面这段简单的脚本。

它比较此次运行和上次运行中日志文件的不同并以便于观察的格式列出相应信息(通过集合去除重复的提示信息,比如不同时间造成的错误信息但它们是相同的错误)。

参数1->查看错误信息
参数2->查看提示信息
参数3->查看警告信息

import re
import sys
import os

"""
@filename:hlpEye.py
@author:hupeiwei.com
@function:Extract different parts(error,notice and warning) of Apache's log file since last run of this script
@environment:python3 Apache2.4 Ubuntu 18.04(LTS)
@usage:
    python3 hlpEye.py 1 -> extract error info
    python3 hlpEye.py 2 -> extract notice info
    python3 hlpEye.py 3 -> extract warning info
"""

#read-only variable
_target = '/var/log/apache2/error.log' #Apache's log file
_tmp = '/tmp/hlpEye.bak'               #temporary file to store log file of last run time
pat_rm_prefix = r'\[.*\](.*)'          #regular expression to filter some additional fields (such as [Sun Sep 23 17:12:56.361995 2018] [php7:emerg] [pid 1283] [client 127.0.0.1:40878] )
pat_slct = r'(.*)?in(.*)?on(.*)?'      #regular expression to extract error/notice/warning infomation,file name and line position

def init_pro():
    os.system("sudo cp " + _target + " " + _tmp)

def cmp_file():
    lst = [set(),set(),set()]
    res = os.popen("sudo diff " + _target + " " + _tmp + " | sed '1d'")
    for s in res:
        s = re.findall(pat_rm_prefix,s)[0]
        if 'error:' in s.lower():
            lst[0].add(s)
        elif 'notice:' in s.lower():
            lst[1].add(s)
        elif 'warning:' in s.lower():
            lst[2].add(s)
    init_pro()
    return lst

def show(_set):
    print("\n-----------Info-----------------------------------------------------------------------------------File---------------------------Line(,referer)\n")
    for s in _set:
        s = re.findall(pat_slct,s)[0]
        print(s[0] + "              " + s[1] + "        " + s[2])
        print('\n')

def main():
    arg = sys.argv
    if len(arg) != 2:
        print("[-]Error para!\n")
        return
    if not os.path.exists(_tmp):
        init_pro()
        print("[+]First build temporary file !\n")
    lst = cmp_file()
    arg = arg[1]
    if arg == '1':
        show(lst[0])
    elif arg == '2':
        show(lst[1])
    elif arg == '3':
        show(lst[2])
    else:
        print('argument should be limit to 1~3')
    return

if __name__ == '__main__':
    main()

显示示例:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值