这批日志有几条 INFO
按模型,三行日志里 count_level(lines, "INFO") 交回几?(两条 INFO、一条 ERROR)
贯穿本节的运维模型(判题机纯 Python、无网,这是它的确定模型,见 spine.py):服务上线后靠日志/指标/健康/告警盯住它。
结构化日志每行是一条 JSON:{"level":..,"msg":..};level_of 取级别、count_level 数某级别、has_error 有没有 ERROR。
import json
def parse(line):
"""一行结构化日志(JSON 字符串)解析成字典。"""
return json.loads(line)
def level_of(line):
"""这行日志的级别(level 字段)。"""
return parse(line)["level"]
def count_level(lines, lvl):
"""一批日志里某个级别有几行。"""
return sum(1 for l in lines if parse(l)["level"] == lvl)
def has_error(lines):
"""这批日志里有没有 ERROR。"""
return any(parse(l)["level"] == "ERROR" for l in lines)
lines = ['{"level":"INFO","msg":"a"}', '{"level":"ERROR","msg":"b"}', '{"level":"INFO","msg":"c"}']
print(count_level(lines, "INFO"))
全部评论