mirror of
https://github.com/internetarchive/brozzler.git
synced 2025-08-06 21:44:29 -04:00
CLI: enable log prefixing
This adds a commandline option which enables log level prefixing. These prefixes enable log level-based filtering in journalctl when present so long as logs are going to the journal, and `SyslogLevelPrefix=` is set to `true` (which it is by default). For documentation: https://manpages.debian.org/testing/libsystemd-dev/sd-daemon.3.en.html
This commit is contained in:
parent
a23dd6a923
commit
e6d0de8f3c
3 changed files with 52 additions and 18 deletions
|
@ -74,6 +74,12 @@ def add_common_options(arg_parser, argv=None):
|
||||||
const=logging.DEBUG,
|
const=logging.DEBUG,
|
||||||
help=("very verbose logging"),
|
help=("very verbose logging"),
|
||||||
)
|
)
|
||||||
|
arg_parser.add_argument(
|
||||||
|
"--syslogd-log-prefix",
|
||||||
|
dest="syslogd_log_prefix",
|
||||||
|
action="store_true",
|
||||||
|
help="add syslogd log level prefix for journalctl filtering",
|
||||||
|
)
|
||||||
# arg_parser.add_argument(
|
# arg_parser.add_argument(
|
||||||
# '-s', '--silent', dest='log_level', action='store_const',
|
# '-s', '--silent', dest='log_level', action='store_const',
|
||||||
# default=logging.INFO, const=logging.CRITICAL)
|
# default=logging.INFO, const=logging.CRITICAL)
|
||||||
|
@ -131,24 +137,48 @@ def decorate_logger_name(a, b, event_dict):
|
||||||
return event_dict
|
return event_dict
|
||||||
|
|
||||||
|
|
||||||
|
# https://manpages.debian.org/testing/libsystemd-dev/sd-daemon.3.en.html
|
||||||
|
def _systemd_log_prefix(_, level, log):
|
||||||
|
SYSLOG_MAP = {
|
||||||
|
"critical": 2,
|
||||||
|
"error": 3,
|
||||||
|
"exception": 3,
|
||||||
|
"warn": 3,
|
||||||
|
"warning": 3,
|
||||||
|
"info": 6,
|
||||||
|
"debug": 7,
|
||||||
|
"notset": 7,
|
||||||
|
}
|
||||||
|
prefix = SYSLOG_MAP.get(level)
|
||||||
|
if prefix is not None:
|
||||||
|
log = f"<{prefix}>{log}"
|
||||||
|
|
||||||
|
return log
|
||||||
|
|
||||||
|
|
||||||
def configure_logging(args):
|
def configure_logging(args):
|
||||||
|
processors = [
|
||||||
|
structlog.contextvars.merge_contextvars,
|
||||||
|
structlog.processors.add_log_level,
|
||||||
|
structlog.processors.StackInfoRenderer(),
|
||||||
|
structlog.dev.set_exc_info,
|
||||||
|
structlog.processors.TimeStamper(fmt="%Y-%m-%d %H:%M:%S", utc=True),
|
||||||
|
structlog.processors.CallsiteParameterAdder(
|
||||||
|
[
|
||||||
|
structlog.processors.CallsiteParameter.FILENAME,
|
||||||
|
structlog.processors.CallsiteParameter.FUNC_NAME,
|
||||||
|
structlog.processors.CallsiteParameter.LINENO,
|
||||||
|
],
|
||||||
|
),
|
||||||
|
decorate_logger_name,
|
||||||
|
structlog.dev.ConsoleRenderer(),
|
||||||
|
]
|
||||||
|
|
||||||
|
if args.syslogd_log_prefix:
|
||||||
|
processors.append(_systemd_log_prefix)
|
||||||
|
|
||||||
structlog.configure(
|
structlog.configure(
|
||||||
processors=[
|
processors=processors,
|
||||||
structlog.contextvars.merge_contextvars,
|
|
||||||
structlog.processors.add_log_level,
|
|
||||||
structlog.processors.StackInfoRenderer(),
|
|
||||||
structlog.dev.set_exc_info,
|
|
||||||
structlog.processors.TimeStamper(fmt="%Y-%m-%d %H:%M:%S", utc=True),
|
|
||||||
structlog.processors.CallsiteParameterAdder(
|
|
||||||
[
|
|
||||||
structlog.processors.CallsiteParameter.FILENAME,
|
|
||||||
structlog.processors.CallsiteParameter.FUNC_NAME,
|
|
||||||
structlog.processors.CallsiteParameter.LINENO,
|
|
||||||
],
|
|
||||||
),
|
|
||||||
decorate_logger_name,
|
|
||||||
structlog.dev.ConsoleRenderer(),
|
|
||||||
],
|
|
||||||
wrapper_class=structlog.make_filtering_bound_logger(args.log_level),
|
wrapper_class=structlog.make_filtering_bound_logger(args.log_level),
|
||||||
context_class=dict,
|
context_class=dict,
|
||||||
logger_factory=structlog.PrintLoggerFactory(),
|
logger_factory=structlog.PrintLoggerFactory(),
|
||||||
|
|
|
@ -29,7 +29,9 @@ import json
|
||||||
import threading
|
import threading
|
||||||
import socket
|
import socket
|
||||||
|
|
||||||
args = argparse.Namespace()
|
arg_parser = argparse.ArgumentParser()
|
||||||
|
brozzler.cli.add_common_options(arg_parser)
|
||||||
|
args = arg_parser.parse_args([])
|
||||||
args.log_level = logging.INFO
|
args.log_level = logging.INFO
|
||||||
brozzler.cli.configure_logging(args)
|
brozzler.cli.configure_logging(args)
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,9 @@ import pytest
|
||||||
|
|
||||||
import brozzler
|
import brozzler
|
||||||
|
|
||||||
args = argparse.Namespace()
|
arg_parser = argparse.ArgumentParser()
|
||||||
|
brozzler.cli.add_common_options(arg_parser)
|
||||||
|
args = arg_parser.parse_args([])
|
||||||
args.log_level = logging.INFO
|
args.log_level = logging.INFO
|
||||||
brozzler.cli.configure_logging(args)
|
brozzler.cli.configure_logging(args)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue