Skip to main content

Easy-to-use context-rich Python logging library.

Project description

oplog logo

Easy-to-use context-rich Python logging library.

python versions downloads Ruff build lint coverage security


Full documentation: oribarilan.github.io/oplog.

Source code: github.com/oribarilan/oplog.


Installation

You can install oplog from PyPI using pip:

pip install op-log

What is oplog?

oplog is a modern logging library for Python application. oplog offers a different paradigm for logging, which is based on the concept of logging operations. Instead of creating a "log-book", which is a long scroll of text messages, oplog is about logging operations with rich data.

Please refer to our full documentation at oribarilan.github.io/oplog.

Key features

  1. Object Oriented: Intuitive API, easy to use and extend.
  2. Modern & Scalable: Unlike log messages, oplog is scaleable. Ingesting oplogs to a columnar database allows you to query, analyze and monitor your app in a modern and performant way.
  3. Standardized: No more mess and inconsistency across your logs. oplog creates a standard for how logs should be written across your code base. Clean code, clean logs.
  4. Production Ready: Easily create dashboards and monitors on top of logged data.
  5. Lightweight: oplog is a layer on top of the standard Python logging library. It is easy to integrate and use.
  6. Minimal: While oplog is rich with metadata, you only log what you need. Creating smaller and more efficient logs.

Getting Started

Setting up the logger

oplog naturally extends Python's built-in logger. To start, create an OperationHandler, and attach to it any logging handler of your choice. Additionally, you should customize your output log format with a formatter. You can create your own or use a built-in one (such as VerboseOpLogLineFormatter).

import logging
from oplog import Operated, OperationHandler
from oplog.formatters import VerboseOplogLineFormatter

stream_op_handler = OperationHandler(
    handler=logging.StreamHandler(), # <-- any logging handler
    formatter=VerboseOplogLineFormatter(), # <-- custom formatter or built-in ones
)   
logging.basicConfig(level=logging.INFO, handlers=[stream_op_handler])

# using a decorator, for simplicity
@Operated()
def foo():
    pass
    
foo()

Output:

2023-08-31 17:31:08.519900 (0ms): [foo.foo / Success]

As you can see, you can use any handler, formatter and filter you want. Oplog does not interfere with them.

  • Line 6 (highlighted) makes any handler an "Operation Handler". If you want to also handle log-book-style logs, you can keep your existing handler (for log message, like logger.info("This is a conventional log message")).
  • Line 7 (highlighted) decides on the log format. It is using a built-in formatter, but you can create your own formatter easily.

Using Context Managers

For more control, you can use the context manager syntax. This allows, for example, to add custom properties to the operation.

import logging
from oplog import Operation, OperationHandler
from oplog.formatters import VerboseOplogLineFormatter

stream_op_handler = OperationHandler(
    handler=logging.StreamHandler(), # <-- any logging handler
    formatter=VerboseOplogLineFormatter(), # <-- custom formatter or built-in ones
)   
logging.basicConfig(level=logging.INFO, handlers=[stream_op_handler])

# using a context manager, for more control
def bar():
    with Operation(name="my_operation") as op:
        op.add("metric", 5)
        pass
    
bar()

Output:

2023-08-31 17:41:09.088966 (0ms): [my_operation / Success] {'metric': 5}

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

op_log-0.22.1.tar.gz (1.9 MB view details)

Uploaded Source

Built Distribution

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

op_log-0.22.1-py3-none-any.whl (18.8 kB view details)

Uploaded Python 3

File details

Details for the file op_log-0.22.1.tar.gz.

File metadata

  • Download URL: op_log-0.22.1.tar.gz
  • Upload date:
  • Size: 1.9 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.23

File hashes

Hashes for op_log-0.22.1.tar.gz
Algorithm Hash digest
SHA256 2f44baad8e54bcb2ddc9504467c70e91e50d6e98ac387d63654ab2bee8bc8785
MD5 2a09cc2df85537c7f3d218a20d7f209c
BLAKE2b-256 d03f82d1e864f6ddd1a6a9a14589604f84ac13b7275314e3629e93610f6d6171

See more details on using hashes here.

File details

Details for the file op_log-0.22.1-py3-none-any.whl.

File metadata

  • Download URL: op_log-0.22.1-py3-none-any.whl
  • Upload date:
  • Size: 18.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.23

File hashes

Hashes for op_log-0.22.1-py3-none-any.whl
Algorithm Hash digest
SHA256 902e63b4a483d16fd42a96b49066f2954bab9c092e0e50347c0c63f53e41ad98
MD5 be7efcf17e23e828a74531480c64f43c
BLAKE2b-256 37d1bbbb1a82624c620ea281d96f6adc40704908899ba37bbfa9095e4b3e4f0c

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