如何用正则表达式从日志提取最大WorkerThreads对应的日期信息
问题解决:从日志中提取WorkerThreads最大值对应日期
需要从多份PerformanceMetrics*.log日志文件中,筛选出满足Instance="sLNSQLServer61"且Type="SnapShot"的行,找到其中WorkerThreads数值最大的条目,并输出对应日期(格式如04/04 17:23:17),输出格式要求为「日期 WorkerThreads = 数值」。现有代码仅能找出WorkerThreads的最大值,无法关联对应日期,核心问题在于正则表达式未捕获日期信息。
修改后的代码
import re import os import fnmatch # 调整正则,同时捕获日期和WorkerThreads数值 pattern = r'(\d{2}/\d{2} \d{2}:\d{2}:\d{2}) .* Instance="sLNSQLServer61" Type="SnapShot" .* WorkerThreads="(\d+)"' # 存储(WorkerThreads数值,日期)元组,便于取最大值时关联日期 worker_threads_data = [] log_path = "C:/Logs/" log_pattern = 'PerformanceMetrics*.log' # 获取匹配的日志文件列表 match_files = fnmatch.filter(os.listdir(log_path), log_pattern) for log_file in match_files: with open(os.path.join(log_path, log_file), 'r') as f: for line in f: match = re.search(pattern, line) if match: date_str = match.group(1) thread_count = int(match.group(2)) worker_threads_data.append((thread_count, date_str)) # 找出数值最大的条目并输出 if worker_threads_data: max_threads, max_date = max(worker_threads_data) print(f"{max_date} WorkerThreads = {max_threads}") else: print("未找到符合条件的日志条目")
关键修改说明
- 正则表达式调整:新增
(\d{2}/\d{2} \d{2}:\d{2}:\d{2})捕获日期段,确保同时提取日期和WorkerThreads数值。 - 数据存储优化:用
(thread_count, date_str)元组存储数据,利用Pythonmax()函数优先比较元组首元素的特性,直接定位数值最大的条目及其对应日期。 - 路径处理规范:使用
os.path.join()拼接文件路径,避免手动拼接路径引发的格式错误。
内容的提问来源于stack exchange,提问作者Ivan_Magana
相关产品推荐
相关产品推荐

