Skip to content

Commit 5cb333c

Browse files
committed
logging: Use dictconfig for more configurable logging.
1 parent c6111a4 commit 5cb333c

File tree

2 files changed

+51
-19
lines changed

2 files changed

+51
-19
lines changed

docs/settings.rst

+26
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,32 @@ A typical ``settings.toml`` file looks like this::
4848
-----END PUBLIC KEY-----'''
4949

5050

51+
Logging
52+
-------
53+
54+
Logging can be deeply customized via the configuration file as it uses
55+
`dictConfig
56+
<https://docs.python.org/3/library/logging.config.html#logging.config.dictConfig>`_
57+
from the `logging` section, by default it is similar to::
58+
59+
[logging]
60+
version = 1
61+
disable_existing_loggers = false
62+
63+
[logging.formatters.full]
64+
format = "[%(asctime)s] %(levelname)s:%(name)s:%(message)s"
65+
66+
[logging.handlers.stderr]
67+
class = "logging.StreamHandler"
68+
stream = "ext://sys.stderr"
69+
level = "DEBUG"
70+
formatter = "full"
71+
72+
[logging.loggers.kisee]
73+
level = "DEBUG"
74+
handlers = ["stderr"]
75+
76+
5177
Sentry
5278
------
5379

kisee/kisee.py

+25-19
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"""
33

44
import argparse
5-
import logging
5+
import logging.config
66
import os
77
import sys
88
from typing import Any, Mapping, Optional
@@ -36,19 +36,33 @@
3636

3737
logger = logging.getLogger(__name__)
3838

39-
40-
def setup_logging(loglevel): # pragma: no cover
39+
DEFAULT_LOGGING_CONFIG = {
40+
"version": 1,
41+
"disable_existing_loggers": False,
42+
"formatters": {
43+
"full": {
44+
"format": "[%(asctime)s] %(levelname)s:%(name)s:%(message)s",
45+
}
46+
},
47+
"handlers": {
48+
"stderr": {
49+
"class": "logging.StreamHandler",
50+
"stream": "ext://sys.stderr",
51+
"level": "DEBUG",
52+
"formatter": "full",
53+
}
54+
},
55+
"loggers": {"kisee": {"level": "DEBUG", "handlers": ["stderr"]}},
56+
}
57+
58+
59+
def setup_logging(settings: dict): # pragma: no cover
4160
"""Setup basic logging
4261
Args:
4362
loglevel (int): minimum loglevel for emitting messages
4463
"""
45-
logformat = "[%(asctime)s] %(levelname)s:%(name)s:%(message)s"
46-
logging.basicConfig(
47-
level=50 - (loglevel * 10),
48-
stream=sys.stdout,
49-
format=logformat,
50-
datefmt="%Y-%m-%d %H:%M:%S",
51-
)
64+
conf = settings["logging"] if "logging" in settings else DEFAULT_LOGGING_CONFIG
65+
logging.config.dictConfig(conf)
5266
logger.info("Kisee %s starting!", kisee.__version__)
5367

5468

@@ -77,14 +91,6 @@ def parse_args(program_args=None) -> argparse.Namespace:
7791
program_args = sys.argv[1:]
7892
parser = argparse.ArgumentParser(description="Shape Identity Provider")
7993
parser.add_argument("--settings", default="settings.toml")
80-
parser.add_argument(
81-
"-v",
82-
"--verbose",
83-
dest="loglevel",
84-
default=0,
85-
help="Verbose mode (-vv for more, -vvv, …)",
86-
action="count",
87-
)
8894
return parser.parse_args(program_args)
8995

9096

@@ -146,8 +152,8 @@ async def on_cleanup_wrapper(app):
146152
def main() -> None: # pragma: no cover
147153
"""Command line entry point."""
148154
args = parse_args()
149-
setup_logging(args.loglevel)
150155
settings = load_conf(args.settings)
156+
setup_logging(settings)
151157
if sentry_sdk:
152158
sentry_sdk.init( # pylint: disable=abstract-class-instantiated
153159
# see https://github.com/getsentry/sentry-python/issues/1081

0 commit comments

Comments
 (0)