forked from ITStudio_OUC/ProgrammeHomework
添加 q1/main.py
This commit is contained in:
+46
@@ -0,0 +1,46 @@
|
||||
import json
|
||||
import os
|
||||
|
||||
def analyze_log(filepath: str) -> dict:
|
||||
if not os.path.exists(filepath):
|
||||
return {}
|
||||
|
||||
total = 0
|
||||
by_level = {}
|
||||
by_user = {}
|
||||
last_error = None
|
||||
|
||||
try:
|
||||
with open(filepath, 'r', encoding="utf-8") as f:
|
||||
first_line = f.readline()
|
||||
if not first_line.strip():
|
||||
return {}
|
||||
|
||||
f.seek(0)
|
||||
for line in f:
|
||||
line = line.strip()
|
||||
if not line:
|
||||
continue
|
||||
try:
|
||||
log_entry = json.loads(line)
|
||||
level = log_entry["level"]
|
||||
user = log_entry["user"]
|
||||
message = log_entry["message"]
|
||||
except (json.JSONDecodeError, TypeError, KeyError):
|
||||
continue
|
||||
|
||||
total += 1
|
||||
by_level[level] = by_level.get(level, 0) + 1
|
||||
by_user[user] = by_user.get(user, 0) + 1
|
||||
|
||||
if level == "ERROR":
|
||||
last_error = message
|
||||
except OSError:
|
||||
return {}
|
||||
|
||||
return {
|
||||
"total": total,
|
||||
"by_level": by_level,
|
||||
"by_user": by_user,
|
||||
"last_error": last_error
|
||||
}
|
||||
Reference in New Issue
Block a user