You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则表达式从日志提取最大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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 17:02:57