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/*