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

最低0.47元/天 解锁文章
1662

被折叠的 条评论
为什么被折叠?



