Skip to main content

Some Structlog configuration and wrappers to easily use structlog.

Project description

MH-Structlog

This package is used to setup the python logging system in combination with structlog. It configures both structlog and the standard library logging module, so your code can either use a structlog logger (which is recommended) or keep working with the standard logging library. This way all third-party packages that are producing logs (which use the stdlib logging module) will follow your logging setup and you will always output structured logging.

It is a fairly opinionated setup but has some configuration options to influence the behaviour. The two output log formats are either pretty-printing (for interactive views) or json. It includes optional reporting to Sentry, and can also log to a file.

Usage

This library should behave mostly as a drop-in import instead of the logging library import.

So instead of

import logging

logger = logging.getLogger(__name__)

logger.info('hey')

you can do

import mh_structlog as logging
logging.setup()  # necessary once at program startup, see readme further below

logger = logging.getLogger(__name__)

logger.info('hey')

One big advantage of using the structlog logger over de stdlib logging one, is that you can pass arbitrary keyword arguments to our loggers when producing logs. E.g.

import mh_structlog as logging

logger = logging.getLogger(__name__)

logger.info('some message', hey='ho', a_list=[1,2,3])

These extra key-value pairs will be included in the produced logs; either pretty-printed to the console or as data in the json entries.

Configuration via setup()

To configure your logging, call the setup function, which should be called once as early as possible in your program execution. This function configures all loggers.

import mh_structlog as logging

logging.setup()

This will work out of the box with sane defaults: it logs to stdout in a pretty colored output when running in an interactive terminal, else it defaults to producing json output. See the next section for information on the arguments to this method.

Configuration options

For a setup which logs everything to the console in a pretty (colored) output, simply do:

from mh_structlog import *

setup(
    log_format='console',
)

getLogger().info('hey')

To log as json:

from mh_structlog import *

setup(
    log_format='json',
)

getLogger().info('hey')

To filter everything out up to a certain level:

from mh_structlog import *

setup(
    log_format='console',
    global_filter_level=WARNING,
)

getLogger().info('hey')  # this does not get printed
getLogger().error('hey')  # this does get printed

To write logs to a file additionally (next to stdout):

from mh_structlog import *

setup(
    log_format='console',
    log_file='myfile.log',
)

getLogger().info('hey')

To silence specific named loggers specifically (instead of setting the log level globally, it can be done per named logger):

from mh_structlog import *

setup(
    log_format='console',
    logging_configs=[
        filter_named_logger('some_named_logger', WARNING),
    ],
)

getLogger('some_named_logger').info('hey')  # does not get logged
getLogger('some_named_logger').warning('hey')  # does get logged

getLogger('some_other_named_logger').info('hey')  # does get logged
getLogger('some_other_named_logger').warning('hey')  # does get logged

To include the source information about where a log was produced:

from mh_structlog import *

setup(
    include_source_location=True
)

getLogger().info('hey')

To choose how many frames you want to include in stacktraces on logging exceptions:

from mh_structlog import *

setup(
    log_format='json',
    max_frames=3,
)

try:
    5 / 0
except Exception as e:
    getLogger().exception(e)

To enable Sentry integration, pass a dict with a config according to the arguments which structlog-sentry allows to the setup function:

from mh_structlog import *
import sentry_sdk

config = {'dsn': '1234'}
sentry_sdk.init(dsn=config['dsn'])

setup(
    sentry_config={'event_level': WARNING}  # pass everything starting from WARNING level to Sentry
)

Development

Install the environment:

uv sync --python-preference only-managed --frozen --all-extras --all-groups

Run the unittests:

uv run pytest -s --pdb --pdbcls=IPython.terminal.debugger:Pdb

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mh_structlog-0.0.56.tar.gz (12.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mh_structlog-0.0.56-py3-none-any.whl (12.8 kB view details)

Uploaded Python 3

File details

Details for the file mh_structlog-0.0.56.tar.gz.

File metadata

  • Download URL: mh_structlog-0.0.56.tar.gz
  • Upload date:
  • Size: 12.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for mh_structlog-0.0.56.tar.gz
Algorithm Hash digest
SHA256 7593b35095d5d5d1e1f25a1343f827d0e88be330943c492b61b0b3ab57868688
MD5 cb7f5dc1ac2bd368af0e7e9e45f8936e
BLAKE2b-256 165c758e7a2650a12880864347a8e47e1ee29b420cfa2c145cace82de462bff3

See more details on using hashes here.

File details

Details for the file mh_structlog-0.0.56-py3-none-any.whl.

File metadata

  • Download URL: mh_structlog-0.0.56-py3-none-any.whl
  • Upload date:
  • Size: 12.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for mh_structlog-0.0.56-py3-none-any.whl
Algorithm Hash digest
SHA256 f036221a0b54e1ad45681bfd02d5cf13c482c4f7f9e8bfa62396796a213fc5e6
MD5 9204b3b632bdb6f2d3384a04a10dcdb5
BLAKE2b-256 e1bdb30c11d7178239a73d0dafd7cdd201638086efd577cc9979a6ddd9336c3b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page