Python Logfmter
A Python package which supports global logfmt formatted logging.
Install
$ pip install logfmter
Usage
Before integrating this library, you should be familiar with Python's logging functionality. I recommend reading the Basic Logging Tutorial.
This package exposes a single Logfmter
class that can be integrated into the standard library logging system similar to any logging.Formatter
.
The provided formatter will logfmt encode all logs. Key value pairs are provided via the extra
keyword argument or by passing a dictionary as the log message.
Basic
import logging
from logfmter import Logfmter
handler = logging.StreamHandler(sys.stderr)
handler.setFormatter(Logfmter())
logger = logging.getLogger()
logger.addHandler(handler)
logger.error("hello", extra={"alpha": 1}) # at=ERROR msg=hello alpha=1
logger.error({"token": "Hello, World!"}) # at=ERROR token="Hello, World!"
Customize
You can subclass the formatter to change its behavior.
import logging
from logfmter import Logfmter
class CustomLogfmter(Logfmter):
"""
Provide a custom logfmt formatter which formats
booleans as "yes" or "no" strings.
"""
@classmethod
def format_value(cls, value):
if isinstance(value, bool):
return "yes" if value else "no"
return super().format_value(value)
handler = logging.StreamHandler(sys.stderr)
handler.setFormatter(CustomLogfmter())
logger = logging.getLogger()
logger.addHandler(handler)
logger.error({"example": True}) # at=ERROR example=yes
Development
Required Software
Refer to the links provided below to install these development dependencies:
Getting Started
Setup
$ <runtimes.txt xargs -n 1 pyenv install -s
$ direnv allow
$ pip install -r requirements/dev.txt
$ pre-commit install
$ pip install -e .
Tests
Run the test suite against the active python environment.
$ pytest
Run the test suite against the active python environment and watch the codebase for any changes.
$ ptw
Run the test suite against all supported python versions.
$ tox
Publishing
Build
$ python -m build
Upload
$ twine upload dist/*