Wrappers
LogMessageWrapper
Message wrapper wraps log message (obviously) and adds context to logs
You can specify prefix
and suffix
for this values. Default prefix is single space and no suffix
Basic usage
import logging
from logdog import LogMessageWrapper
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger("mylogger")
user_id = 1
some_value = "some string"
logger.info("user login", extra={"not": "included", "user": user_id, "value": some_value})
# output: INFO:mylogger:user login
log = LogMessageWrapper(logger)
log.info("user login", user=user_id, action="login", value=some_value)
# output: INFO:mylogger:user login user=1 action=login value="some string"
Custom format
logging.basicConfig(level=logging.INFO, format="%(asctime)s : %(levelname)-8s : %(message)s")
logger = logging.getLogger("mylogger")
log = LogMessageWrapper(logger, prefix=" : ")
log.info("user login", user=user_id, action="login", value=some_value)
# output: 2023-09-05 12:01:09,836 : INFO : user login : user=1 action=login value="some string"
Different encoder
You can use different encoder for those extra values.
Default is LogfmtEncoder
, but if you want to encode values as JSON you can use JsonEncoder
(or your own encoder)
from logdog.encoder import JsonEncoder
log = LogMessageWrapper(
logger,
prefix=" [",
suffix="]",
encoder=JsonEncoder(),
)
log.info("user login", user=user_id, action="login", value=some_value)
# output: 2023-09-05 12:01:09,836 : INFO : user login [{"user": 1, "action": "login", "value": "some string"}]
More examples
More examples can be found in examples/log_message_wrapper.py
file
LogExtraWrapper
Extra wrapper wraps kwargs
into logging.Record
's extra
property
It is recommended to use it together with some formatter
Basic usage
import logging
from logdog import LogMessageWrapper
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger("mylogger")
user_id = 1
some_value = "some string"
# so this
logger.info("user login", extra={"user": user_id, "value": some_value})
log = LogMessageWrapper(logger)
# is the same as this
log.info("user login", user=user_id, value=some_value)