日志汇总员
早班值班同事刚发来一段应用日志,想让你先出一版摘要,好让后面巡检和排查的人知道该先看哪里。现在没人等你搭一整套平台,他们只想先知道哪些行值得注意、哪个模块真的在报错、哪些用户出现在这段记录里。
所以你现在要做的,是把这份日志样本文本读明白,整理成一份短小但有用的值班摘要。等你交出结果后,下一位接手排查的人就能更快决定要继续翻哪几行、优先盯哪一个来源。
先看一个更小的动作:拆开一行日志,抓住重点
先别急着处理整份日志。先用一个玩具例子看看:一行记录被拆开以后,重点信息会怎样变得更清楚。
toy_line = "2026-04-12 08:41 | WARN | gate | user=ava | badge scan delayed"
parts = toy_line.split(" | ")
timestamp = parts[0]
level = parts[1]
source = parts[2]
user = parts[3].replace("user=", "")
message = parts[4]
minute = timestamp.split(" ")[1]
print(f"{minute} {level} {source} {user} - {message}")
这个例子没有处理今天的整份日志,也没有做统计。它只是先示范:日志不是一整团难懂的文本,而是一行一行可以拆、可以提炼的记录。
今天要交付什么:读取 village_app.log.txt,做出一份值班摘要
脚本已经读取了 village_app.log.txt,并把原始文本放进 raw_log_text。你要继续把它拆成行,筛出真正需要关注的告警,统计错误来源,再把结果放进 alert_lines 和 log_summary。
用 raw_log_text.splitlines() 做出 log_lines。这样你后面就能一行一行地处理日志,而不是一直对整段文本下手。
在循环里用 line.split(" | ") 拆出 5 个字段。接着从 timestamp 里拿出分钟字符串,用 replace("user=", "") 把用户名字清出来。
如果 level 是 WARN 或 ERROR,就把这一行整理成一条简短提醒,加入 alert_lines。如果是 ERROR,再按 source 给 error_counts 做计数。
用 users_seen 按首次出现顺序保留用户,再做出 log_summary,里面至少要有日志总行数、告警数量、错误来源统计和出现过的用户列表。
很多排查都是从这一步开始:先把值得注意的几行摘出来,再决定要不要继续深挖。你现在交付的,就是这样一份能帮别人接着查下去的小结果。
参考答案点击展开点击收起
ASSET_FILENAME = "village_app.log.txt"
with open(ASSET_FILENAME, "r", encoding="utf-8") as file:
raw_log_text = file.read().strip()
print("Raw log text:")
print(raw_log_text)
log_lines = raw_log_text.splitlines()
alert_lines = []
error_counts = {}
users_seen = []
for line in log_lines:
parts = line.split(" | ")
timestamp = parts[0]
level = parts[1]
source = parts[2]
user_part = parts[3]
message = parts[4]
minute = timestamp.split(" ")[1]
user = user_part.replace("user=", "")
if user not in users_seen:
users_seen.append(user)
if level == "WARN" or level == "ERROR":
alert_lines.append(f"{minute} {level} {source} {user} - {message}")
if level == "ERROR":
if source not in error_counts:
error_counts[source] = 0
error_counts[source] += 1
log_summary = {
"total_lines": len(log_lines),
"alert_count": len(alert_lines),
"error_counts": error_counts,
"users_seen": users_seen,
}
print("Alert lines:", alert_lines)
print("Log summary:", log_summary)高级技巧想更进一步?点击展开点击收起
这节课最重要的变化是:你不只是把字符串拆开了,而是先替别人整理出一版能拿来排查的重点摘要。
当你能从一段记录里快速抓出告警、来源和用户时,文本处理就已经开始变成现实里真正有用的小工具能力了。