Skip to main content

'beans-logging' is a python package for simple logger and easily managing logs.

Project description

Python Logging (beans-logging)

MIT License GitHub Workflow Status GitHub release (latest SemVer) PyPI PyPI - Python Version

beans-logging is a python package for simple logger and easily managing logs.

It is a Loguru based custom logging package for python projects.

✨ Features

  • Main logger based on Loguru logging - https://pypi.org/project/loguru
  • Logging to log files (all, error, json)
  • Pre-defined logging configs and handlers
  • Colorful logging
  • Auto intercepting and muting modules
  • Load config from YAML or JSON file
  • Custom options as a config
  • Custom logging formats
  • Multiprocess compatibility (Linux, macOS - 'fork')
  • Add custom handlers
  • Base logging module

🛠 Installation

1. 🚧 Prerequisites

[OPTIONAL] For DEVELOPMENT environment:

2. 📥 Download or clone the repository

[TIP] Skip this step, if you're going to install the package directly from PyPi or GitHub repository.

2.1. Prepare projects directory (if not exists):

# Create projects directory:
mkdir -pv ~/workspaces/projects

# Enter into projects directory:
cd ~/workspaces/projects

2.2. Follow one of the below options [A], [B] or [C]:

OPTION A. Clone the repository:

git clone https://github.com/bybatkhuu/module-python-logging.git && \
    cd module-python-logging

OPTION B. Clone the repository (for DEVELOPMENT: git + ssh key):

git clone git@github.com:bybatkhuu/module-python-logging.git && \
    cd module-python-logging

OPTION C. Download source code:

  1. Download archived zip file from releases.
  2. Extract it into the projects directory.

3. 📦 Install the package

[NOTE] Choose one of the following methods to install the package [A ~ F]:

OPTION A. [RECOMMENDED] Install from PyPi:

pip install -U beans-logging

OPTION B. Install latest version directly from GitHub repository:

pip install git+https://github.com/bybatkhuu/module-python-logging.git

OPTION C. Install from the downloaded source code:

# Install directly from the source code:
pip install .

# Or install with editable mode:
pip install -e .

OPTION D. Install for DEVELOPMENT environment:

pip install -e .[dev]

# Install pre-commit hooks:
pre-commit install

OPTION E. Install from pre-built release files:

  1. Download .whl or .tar.gz file from releases
  2. Install with pip:
# Install from .whl file:
pip install ./beans_logging-[VERSION]-py3-none-any.whl

# Or install from .tar.gz file:
pip install ./beans_logging-[VERSION].tar.gz

OPTION F. Copy the module into the project directory (for testing):

# Install python dependencies:
pip install -r ./requirements.txt

# Copy the module source code into the project:
cp -r ./src/beans_logging [PROJECT_DIR]
# For example:
cp -r ./src/beans_logging /some/path/project/

🚸 Usage/Examples

To use beans_logging, import the logger instance from the beans_logging.auto package:

from beans_logging.auto import logger

You can call logging methods directly from the logger instance:

logger.info("Logging info.")

Simple

configs/logger.yml:

logger:
  app_name: my-app
  default:
    level:
      base: TRACE
  handlers:
    default.all.file_handler:
      enabled: true
    default.err.file_handler:
      enabled: true
    default.all.json_handler:
      enabled: true
    default.err.json_handler:
      enabled: true

main.py:

#!/usr/bin/env python

from beans_logging.auto import logger


logger.trace("Tracing...")
logger.debug("Debugging...")
logger.info("Logging info.")
logger.success("Success.")
logger.warning("Warning something.")
logger.error("Error occured.")
logger.critical("CRITICAL ERROR.")


def divide(a, b):
    _result = a / b
    return _result


def nested(c):
    try:
        divide(5, c)
    except ZeroDivisionError as err:
        logger.error(err)
        raise


try:
    nested(0)
except Exception:
    logger.exception("Show me, what value is wrong:")

Run the examples/simple:

cd ./examples/simple

python ./main.py

Output:

[2025-11-01 00:00:00.735 +09:00 | TRACE | beans_logging._intercept:96]: Intercepted modules: ['potato_util._base', 'potato_util.io', 'concurrent', 'concurrent.futures', 'asyncio', 'potato_util.io._sync', 'potato_util']; Muted modules: [];
[2025-11-01 00:00:00.736 +09:00 | TRACE | __main__:6]: Tracing...
[2025-11-01 00:00:00.736 +09:00 | DEBUG | __main__:7]: Debugging...
[2025-11-01 00:00:00.736 +09:00 | INFO  | __main__:8]: Logging info.
[2025-11-01 00:00:00.736 +09:00 | OK    | __main__:9]: Success.
[2025-11-01 00:00:00.736 +09:00 | WARN  | __main__:10]: Warning something.
[2025-11-01 00:00:00.736 +09:00 | ERROR | __main__:11]: Error occured.
[2025-11-01 00:00:00.736 +09:00 | CRIT  | __main__:12]: CRITICAL ERROR.
[2025-11-01 00:00:00.736 +09:00 | ERROR | __main__:24]: division by zero
[2025-11-01 00:00:00.737 +09:00 | ERROR | __main__:31]: Show me, what value is wrong:
Traceback (most recent call last):

> File "/home/user/workspaces/projects/my/module-python-logging/examples/simple/./main.py", line 29, in <module>
    nested(0)
    └ <function nested at 0x102f37910>

  File "/home/user/workspaces/projects/my/module-python-logging/examples/simple/./main.py", line 22, in nested
    divide(5, c)
    │         └ 0
    └ <function divide at 0x102f377f0>

  File "/home/user/workspaces/projects/my/module-python-logging/examples/simple/./main.py", line 16, in divide
    _result = a / b
              │   └ 0
              └ 5

ZeroDivisionError: division by zero

👍


⚙️ Configuration

templates/configs/logger.yml:

logger:
  # app_name: app
  default:
    level:
      base: INFO
      err: WARNING
    std:
      format_str: "[<c>{time:YYYY-MM-DD HH:mm:ss.SSS Z}</c> | <level>{extra[level_short]:<5}</level> | <w>{name}:{line}</w>]: <level>{message}</level>"
      colorize: true
    format_str: "[{time:YYYY-MM-DD HH:mm:ss.SSS Z} | {extra[level_short]:<5} | {name}:{line}]: {message}"
    file:
      logs_dir: "./logs"
      rotate_size: 10000000
      rotate_time: "00:00:00"
      retention: 90
      encoding: utf8
      plain:
        log_path: "{app_name}.all.log"
        err_path: "{app_name}.err.log"
      json:
        log_path: "json/{app_name}.json.all.log"
        err_path: "json/{app_name}.json.err.log"
    custom_serialize: false
  intercept:
    enabled: true
    only_base: false
    ignore_modules: []
    include_modules: []
    mute_modules: []
  handlers:
    default.all.std_handler:
      type: STD
      enabled: true
    default.all.file_handler:
      type: FILE
      enabled: false
    default.err.file_handler:
      type: FILE
      error: true
      enabled: false
    default.all.json_handler:
      type: FILE
      serialize: true
      enabled: false
    default.err.json_handler:
      type: FILE
      serialize: true
      error: true
      enabled: false
  extra:

🌎 Environment Variables

.env.example:

# ENV=LOCAL
# DEBUG=false
# TZ=UTC

🧪 Running Tests

To run tests, run the following command:

# Install python test dependencies:
pip install .[test]

# Run tests:
python -m pytest -sv -o log_cli=true
# Or use the test script:
./scripts/test.sh -l -v -c

🏗️ Build Package

To build the python package, run the following command:

# Install python build dependencies:
pip install -r ./requirements/requirements.build.txt

# Build python package:
python -m build
# Or use the build script:
./scripts/build.sh

📝 Generate Docs

To build the documentation, run the following command:

# Install python documentation dependencies:
pip install -r ./requirements/requirements.docs.txt

# Serve documentation locally (for development):
mkdocs serve -a 0.0.0.0:8000
# Or use the docs script:
./scripts/docs.sh

# Or build documentation:
mkdocs build
# Or use the docs script:
./scripts/docs.sh -b

📚 Documentation


📑 References

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

beans_logging-7.0.0.tar.gz (20.0 kB view details)

Uploaded Source

Built Distribution

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

beans_logging-7.0.0-py3-none-any.whl (18.5 kB view details)

Uploaded Python 3

File details

Details for the file beans_logging-7.0.0.tar.gz.

File metadata

  • Download URL: beans_logging-7.0.0.tar.gz
  • Upload date:
  • Size: 20.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.19

File hashes

Hashes for beans_logging-7.0.0.tar.gz
Algorithm Hash digest
SHA256 94d71347640c324d747886e8484a595a139be3b867619bb28e0f34cf2be89109
MD5 f8811d230e4fb3d37618245d8be8ff36
BLAKE2b-256 a2e291d4d11e985138b9c5fe5dd366f086d6f4f14698f7448ac0b4d7b9710ed5

See more details on using hashes here.

File details

Details for the file beans_logging-7.0.0-py3-none-any.whl.

File metadata

  • Download URL: beans_logging-7.0.0-py3-none-any.whl
  • Upload date:
  • Size: 18.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.19

File hashes

Hashes for beans_logging-7.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 170f1ce058841b72202865da277735fe2caba9dbb1784927625ce0f3d95c7c4e
MD5 85d6431ac3dbf2d5f0c2d8cc9f2da5e9
BLAKE2b-256 59ccc3b4f7fe5ec44a156dcaba77e68e128a30f3e42cc461255f28ec70343ff1

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