mirror of
https://github.com/bellingcat/auto-archiver.git
synced 2026-06-12 13:18:28 +03:00
allow for human readable console logs, but defaults to JSON on file logs.
This commit is contained in:
@@ -15,7 +15,7 @@ import traceback
|
||||
from copy import copy
|
||||
|
||||
from rich_argparse import RichHelpFormatter
|
||||
from auto_archiver.utils.custom_logger import logger
|
||||
from auto_archiver.utils.custom_logger import format_for_human_readable_console, logger
|
||||
import requests
|
||||
|
||||
from auto_archiver.utils.misc import random_str
|
||||
@@ -348,7 +348,9 @@ Here's how that would look: \n\nsteps:\n extractors:\n - [your_extractor_name_
|
||||
sys.stderr,
|
||||
level=use_level,
|
||||
catch=True,
|
||||
format="<level>{level}</level>: <fg #64FFDA>{message}</fg #64FFDA> {extra[serialize_no_message]}",
|
||||
format="<level>{extra[serialized]}</level>"
|
||||
if logging_config.get("format", "").lower() == "json"
|
||||
else format_for_human_readable_console(),
|
||||
)
|
||||
|
||||
rotation = logging_config["rotation"]
|
||||
|
||||
@@ -2,13 +2,21 @@ from loguru import logger
|
||||
import json
|
||||
|
||||
|
||||
def extract_location(record, short=False):
|
||||
"""Extracts the file name, function name, and line number from the log record."""
|
||||
if short:
|
||||
return f"{record['file'].name}:{record['line']}"
|
||||
return f"{record['file'].name}:{record['function']}:{record['line']}"
|
||||
|
||||
|
||||
def extract_log_data(record):
|
||||
subset = {
|
||||
"level": record["level"].name,
|
||||
"time": record["time"].isoformat(timespec="seconds"),
|
||||
}
|
||||
subset["loc"] = f"{record['file'].name}:{record['function']}:{record['line']}"
|
||||
subset["loc"] = extract_location(record)
|
||||
|
||||
# This is where logger.contextualize() parameters can be added to the output
|
||||
for extra_key in ["trace", "url", "worksheet", "row"]:
|
||||
if extra_val := record.get("extra", {}).get(extra_key):
|
||||
subset[extra_key] = extra_val
|
||||
@@ -19,9 +27,14 @@ def extract_log_data(record):
|
||||
return subset
|
||||
|
||||
|
||||
def serialize_no_message(record):
|
||||
def serialize_for_console(record):
|
||||
subset = extract_log_data(record)
|
||||
subset.pop("message", None)
|
||||
subset.pop("level", None)
|
||||
subset.pop("loc", None)
|
||||
subset.pop("time", None)
|
||||
if not subset:
|
||||
return ""
|
||||
return json.dumps(subset, ensure_ascii=False)
|
||||
|
||||
|
||||
@@ -31,7 +44,16 @@ def serialize(record):
|
||||
|
||||
def patching(record):
|
||||
record["extra"]["serialized"] = serialize(record)
|
||||
record["extra"]["serialize_no_message"] = serialize_no_message(record)
|
||||
record["extra"]["serialize_for_console"] = serialize_for_console(record)
|
||||
|
||||
|
||||
def format_for_human_readable_console():
|
||||
return (
|
||||
"<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | "
|
||||
"<level>{level: <8}</level> | "
|
||||
"<cyan>{file}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> | "
|
||||
"{extra[serialize_for_console]} <level>{message}</level>"
|
||||
)
|
||||
|
||||
|
||||
logger = logger.patch(patching)
|
||||
|
||||
Reference in New Issue
Block a user