【工具类】正则表达式过滤器(过滤日志、过滤文件)

1. 【工具类】正则表达式过滤器(过滤日志、过滤文件)

1.1. 划重点

功能: python实现的支持对文件进行正则表达式过滤,不同的过滤模板,维护不同的正则表达式文件即可,方便跨平台通用

  • 编写自己的正则表达式,主要填写 regexp 字段,并保存为 regular.json 文件,格式如下
[
{
   
   "id": "","regexp": ".*hello world.*","ignore":0,"add":"","time_id":""},
{
   
   "id": "","regexp": "^my name is knowledgebao.*","ignore":0,"add":"","time_id":""}
]
  • 将下边python代码保存为 filter_file.py 文件,准备要过滤的文件 test.log
  • 执行 python3 filter_file.py -i test.log -r regular.json -o output.log 其中 output.log 是过滤后的文件
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import re
import argparse
import os
import logging
import json
import uuid
import csv
from datetime import datetime

logging.basicConfig(format='[%(asctime)s.%(msecs)03d] [%(levelname).1s] [%(filename)s:%(lineno)d] %(message)s',
                    datefmt='%Y-%m-%d %H:%M:%S')
logger = logging.getLogger(__name__)

#  日志级别设置


def set_log_level(level):
    log_levels = {
   
   
        0: logging.DEBUG,
        1: logging.INFO,
        2: logging.WARNING,
        3: logging.ERROR,
        4: logging.CRITICAL
    }
    if level in log_levels:
        logger.setLevel(log_levels[level])


# 正则表达式解析结构体,对应 json 文件中的一条记录
class regexp_info:
    def __init__(self):
        self.id = None              #
        self.ignore = None          #
        self.add = None             # 额外添加在日志前边的字符串
        self.regexp_text = None     # 原始正则表达式内容
        self.regexp = None          # 编译后的正则表达式句柄
        self.time_id = None         #

        self.time = None

    def __str__(self) -> str:
        return f"id: {
     
     self.id}, ignore: {
     
     self.ignore}, add: {
     
     self.add}, time_id: {
     
     self.time_id} regexp: {
     
     self.regexp_text}"


# 常用正则表达式
class regexp_utils:
    pattern_times = [
        # ... [0411 15:46:57.447] log info
        [re.compile(r".*\[(\d{4} \d{2}:\d{2}:\d{2}\.\d{3})\]"),
         "%m%d %H:%M:%S.%f"],
        # ... [2024-04-26 12:00:37.125 D|E|I|W] log info
        [re.compile(
            r".*\[(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}) [D|E|I|W]\]"), "%Y-%m-%d %H:%M:%S.%f"]
    ]

# 日志解析类,过滤日志文件


class filter_file:
    def __init__(self):
        self.regexps = {
   
   }
        self.pattern_time = None
        self.f = None
        self.all_line = 0
        self.process_line = 0
        self.valid_line = 0
        self.valid_times = []

    # 解析正则表达式
    def parse_regexp(self, regexp_path, regexp_list, output, time_info):
        self.pattern_time = time_info[0]
        self.format_time = time_info[1
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值