Skip to main content

A non-invasive `logging` configurator and facilitator.

Project description

hanaro (하나로) is a non-invasive logging configurator and facilitator for Python.

This README is only a high-level introduction to hanaro. For more detailed documentation, please view the official docs at https://hanaro.readthedocs.io.

Installation

hanaro can be installed from pypi through the usual means:

pip install hanaro

Usage

Let's try a "learn by example" approach. The following two snippets are the contents of a configuration file that contains a "logging" configuration section, and a Python code file that initializes Python's standard logging system using that configuration. This is by no means an exhaustive example, it only intends to touch on the major offerings of hanaro.

NOTE: Configuration handling is performed using appsettings2 which supports json, toml, yaml, xml, command-line args, and environment variables to provide a unified configuration solution. This example, however, uses json because of json's wider familiarity. For the sake of demonstration assume this content is in a file named appsettings.json.

{
    "logging": {
        "level": "INFO",
        "format": "[%(asctime)s] %(message)s level=%(levelname)s source=%(name)s %(meta)s",
        "datefmt": "%Y-%m-%dT%H:%M:%S",
        "handlers": [
            {
                "type": "console",
                "level": "DEBUG"
            },
            {
                "type": "file",
                "level": "DEBUG",
                "path": "logs/",
                "name": "debug.log",
                "max_size": "4KiB",
                "max_count": 10,
                "format": "[%(asctime)s] level=%(levelname)s %(message)s source=\"%(name)s\" func=\"%(funcName)s\" %(meta)s"
            },
            {
                "type": "custom",
                "canonical": "myapp.mymodule.myhandler",
                "level": "WARNING",
                "format": "msg=\"%(message)s\" level=\"%(levelname)s\" source=\"%(name)s\" func=\"%(funcName)s\" %(meta)s"
            }
        ],
        "filters": {
            "asyncio": {
                "level": "WARNING"
            },
            "mysql.connector": {
                "level": "WARNING"
            },
            "urllib3.connectionpool": {
                "level": "WARNING"
            },
            "websockets.client": {
                "level": "WARNING"
            }
        }
    },
}

This code sample is a minimum-viable solution. The custom handler above is omitted, but for the sake of demonstration know that canonical is the fully-qualified type name of a logging.Handler subclass and hanaro will create an instance of that class and configure as it does all other handlers.

from appsettings2 import getConfiguration
from hanaro import configureLogging
import logging

configureLogging(getConfiguration())

logger = logging.getLogger(__name__)

logger.info('Hello, World!')

When executed the program outputs the following:

[2025-12-31T12:34:56] Hello, World! level=INFO source=__main__ 

Notables..

Things not obvious given the example above:

  • All configuration options are optional, you can reduce the config to specifying only those things you wish to customize.
  • It is not necessary to load a configuration at all, a call to configureLogging() will still apply reasonable defaults such as adding a console handler, applying a line format, applying a default date format (ISO 9601), etc.
  • If no handlers are configured, a default handler for "console" is configured.

hanaro only has a single direct dependency: appsettings2.

Contact

You can reach me on Discord or open an Issue on Github.

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

hanaro-0.0.3.tar.gz (5.8 kB view details)

Uploaded Source

Built Distribution

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

hanaro-0.0.3-py3-none-any.whl (7.2 kB view details)

Uploaded Python 3

File details

Details for the file hanaro-0.0.3.tar.gz.

File metadata

  • Download URL: hanaro-0.0.3.tar.gz
  • Upload date:
  • Size: 5.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3+

File hashes

Hashes for hanaro-0.0.3.tar.gz
Algorithm Hash digest
SHA256 bab76aad6a3648389325e3dc9606a89e42eb80b0ba4d770770dd53a77dafb3ab
MD5 a6c248b5b81bb63dc7c104bcc6140f19
BLAKE2b-256 d7f37c2e6cc25d9361cf4e6e3b57052382f05a46fcd27a799c6bd661da8a2f1a

See more details on using hashes here.

File details

Details for the file hanaro-0.0.3-py3-none-any.whl.

File metadata

  • Download URL: hanaro-0.0.3-py3-none-any.whl
  • Upload date:
  • Size: 7.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3+

File hashes

Hashes for hanaro-0.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 49b8142ac6f6240bdc794584e4b79a6cd16bf845665ece3b1ebdb70e227df9c3
MD5 57c64897519ecb9b3320043462dc831c
BLAKE2b-256 0655e8d2a02bf9cab747dc4fdd8e91fee14a233b38f729c970a46a103b51e141

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