A library extending the standard logging toolbox (e.g., facilitating structured logging with minimal fuss).
Project description
certlib.log
...is a library that extends the standard logging
toolset. Among other things, it makes it possible to introduce
structured logging with minimal fuss, and/or to start using the
modern {}-based style of log message formatting (gradually if
required).
Basic Info
- Documentation: certlib-log.readthedocs.io
- Repository: github.com/CERT-Polska/certlib-log
- Package: pypi.org/project/certlib-log
You can install the certlib.log library by running (typically, in a
virtual environment)
the command:
python3 -m pip install certlib.log
The library is compatible with Python 3.10 and all newer versions of Python. It uses only the Python standard library, i.e., it does not depend on any third-party packages.
Examples
Configuring Structured Logging and Auto-Makers
import logging.config
logging.config.dictConfig({
"formatters": {
"structured": {
"()": "certlib.log.StructuredLogsFormatter",
"defaults": {
# Each key in this dict should be an *output data* key.
# Each value should specify the respective *default value*.
"system": "MyExample",
"component": "MyAPI",
"component_type": "web"
},
"auto_makers": {
# Each key in this dict should be an *output data* key.
# Each value should specify an *argumentless callable*
# (for example, the `get()` method of some `ContextVar`).
"client_ip": "myexample.myapi.client_ip_context_var.get",
"nano_time": "time.time_ns"
}
}
},
"handlers": {
"stderr": {
"class": "logging.StreamHandler",
"stream": "ext://sys.stderr",
"formatter": "structured"
}
},
"root": {
"level": "INFO",
"handlers": ["stderr"]
},
"disable_existing_loggers": False,
"version": 1
})
Logging Stuff With {}-Formatted Text Message or No Text Message
import datetime as dt
import ipaddress
import logging
from certlib.log import xm # Note: `xm` is short for `ExtendedMessage`
logger = logging.getLogger(__name__)
...
def example_with_text_message_formatting(city, humidity, error_summary=None):
if error_summary:
logger.error(xm(
'An error occurred: {!r}', error_summary,
exc_info=True, stack_info=True, stacklevel=2,
))
logger.warning(xm('Humidity in {} is {:.1%}', city, humidity))
logger.info(xm(
# (Here: making use of `datetime`-specific format codes...)
'Today is day #{today:%j} of the year {today:%Y}',
today=dt.date.today(),
# Arbitrary data items can also be given (which is especially
# useful when `certlib.log.StructuredLogsFormatter` is in use).
some_extra_item=42,
other_arbitrary_stuff={'foo': [
{'my-ip': ipaddress.IPv4Address('192.168.0.1')},
dt.time(12, 59),
]},
))
def example_with_no_text(temperature, pressure, debug_data_dict, calm=True):
# (The possibility to focus on pure data, *without* the need
# to pass any *text-message*-related arguments, is especially
# handy when `certlib.log.StructuredLogsFormatter` is in use.)
if calm:
logger.info(xm(
# Just data:
temperature=temperature,
pressure=pressure,
))
else:
logger.error(xm(
# Just data:
temperature=temperature,
pressure=pressure,
# Special arguments:
exc_info=True,
stack_info=True,
stacklevel=2,
))
# Single dict providing data is also OK:
logger.debug(xm(debug_data_dict))
You can find more examples in the User's Guide.
Copyright and License
Copyright (c) 2026, CERT Polska. All rights reserved.
The certlib.log library
is free software; you can redistribute and/or modify it under the terms
of the BSD 3-Clause "New" or "Revised" License (see the LICENSE.txt
file in the source code repository).
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file certlib_log-1.0.0b3.tar.gz.
File metadata
- Download URL: certlib_log-1.0.0b3.tar.gz
- Upload date:
- Size: 106.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1a9022c0654d9b3705c464f8bdddb850968364c920d8d4edfc84aaa9369a9550
|
|
| MD5 |
c95d951dff85e26d323eb5f849adfd4d
|
|
| BLAKE2b-256 |
19614586493c22dcefa71ec7082104c005074379097a6c62c8f84d5852dc46f2
|
File details
Details for the file certlib_log-1.0.0b3-py3-none-any.whl.
File metadata
- Download URL: certlib_log-1.0.0b3-py3-none-any.whl
- Upload date:
- Size: 43.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eb7a69eeee7506fa94e8d1e862c083988ab6d82721dadac1c6ab8eb8e700b14b
|
|
| MD5 |
2948bb370a9fb2c8d08472a332052b78
|
|
| BLAKE2b-256 |
e51c700256d52c218ca5cfa9df756db7ab85c0e749b8b60cbdc6fb25e96c2755
|