Skip to main content

Unified logging and alerting library for Python.

This project has been archived.

The maintainers of this project have marked this project as archived. No new releases are expected.

Project description

commonlog (Python)

A unified logging and alerting library for Python, supporting Slack and Lark integrations via WebClient. Features configurable providers, alert levels, and file attachment support.

Installation

Install via pip:

pip install commonlog

Or copy the python/ directory to your project.

Usage

from python import commonlog, Config, SendMethod, AlertLevel, Attachment, LarkToken

# Configure logger
config = Config(
    provider="lark", # or "slack"
    send_method=SendMethod.WEBCLIENT,
    token="app_id++app_secret", # for Lark, use "app_id++app_secret" format
    slack_token="xoxb-your-slack-token", # dedicated Slack token
    lark_token=LarkToken(app_id="your-app-id", app_secret="your-app-secret"), # dedicated Lark token
    channel="your_lark_channel_id",
    redis_host="localhost", # required for Lark
    redis_port="6379",      # required for Lark
)
logger = commonlog(config)

# Send error with attachment
logger.send(AlertLevel.ERROR, "System error occurred", Attachment(url="https://example.com/log.txt"))

 # Send info (logs only)
logger.send(AlertLevel.INFO, "Info message")

# Send to a specific channel
logger.send_to_channel(AlertLevel.ERROR, "Send to another channel", channel="another-channel-id")

# Send to a different provider dynamically
logger.custom_send("slack", AlertLevel.ERROR, "Message via Slack", channel="slack-channel")

Lark Token Caching

When using Lark, the tenant_access_token is cached in Redis. The expiry is set dynamically from the API response minus 10 minutes. You must set redis_host and redis_port in your config.

Channel Mapping

You can configure different channels for different alert levels using a channel resolver:

from commonlog import commonlog, Config, SendMethod, AlertLevel, DefaultChannelResolver

# Create a channel resolver
resolver = DefaultChannelResolver(
    channel_map={
        AlertLevel.INFO: "#general",
        AlertLevel.WARN: "#warnings",
        AlertLevel.ERROR: "#alerts",
    },
    default_channel="#general"
)

# Create config with channel resolver
config = Config(
    provider="slack",
    send_method=SendMethod.WEBCLIENT,
    token="xoxb-your-slack-bot-token",
    channel_resolver=resolver,
    service_name="user-service",
    environment="production"
)

logger = commonlog(config)

# These will go to different channels based on level
logger.send(AlertLevel.INFO, "Info message")    # goes to #general
logger.send(AlertLevel.WARN, "Warning message") # goes to #warnings
logger.send(AlertLevel.ERROR, "Error message")  # goes to #alerts

Custom Channel Resolver

You can implement custom channel resolution logic:

class CustomResolver(ChannelResolver):
    def resolve_channel(self, level):
        if level == AlertLevel.ERROR:
            return "#critical-alerts"
        elif level == AlertLevel.WARN:
            return "#monitoring"
        else:
            return "#general"

Configuration Options

Common Settings

  • provider: "slack" or "lark"
  • send_method: "webclient" (token-based authentication)
  • channel: Target channel or chat ID (used if no resolver)
  • channel_resolver: Optional resolver for dynamic channel mapping
  • service_name: Name of the service sending alerts
  • environment: Environment (dev, staging, production)

Provider-Specific

  • token: API token for WebClient authentication (required)

Alert Levels

  • INFO: Logs locally only
  • WARN: Logs + sends alert
  • ERROR: Always sends alert

File Attachments

Provide a public URL. The library appends it to the message for simplicity.

attachment = Attachment(url="https://example.com/log.txt")
logger.send(AlertLevel.ERROR, "Error with log", attachment)

Trace Log Section

When include_trace is set to True, you can pass trace information as the fourth parameter to send():

trace = """Traceback (most recent call last):
  File "app.py", line 10, in main
    raise ValueError("Something went wrong")
ValueError: Something went wrong"""

logger.send(AlertLevel.ERROR, "System error occurred", None, trace)

This will format the trace as a code block in the alert message.

Testing

cd python
PYTHONPATH=.. python -m unittest test_commonlog.py

API Reference

Classes

  • Config: Configuration class
  • Attachment: File attachment class
  • Provider: Abstract base class for alert providers
  • commonlog: Main logger class

Constants

  • SendMethod.WEBCLIENT: Send method (token-based authentication)
  • AlertLevel.INFO, AlertLevel.WARN, AlertLevel.ERROR: Alert levels

Methods

  • commonlog(config): Create a new logger
  • commonlog.send(level, message, attachment=None, trace=""): Send alert with optional trace

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

commonlog-0.1.5.tar.gz (5.2 kB view details)

Uploaded Source

Built Distribution

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

commonlog-0.1.5-py3-none-any.whl (6.2 kB view details)

Uploaded Python 3

File details

Details for the file commonlog-0.1.5.tar.gz.

File metadata

  • Download URL: commonlog-0.1.5.tar.gz
  • Upload date:
  • Size: 5.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for commonlog-0.1.5.tar.gz
Algorithm Hash digest
SHA256 b28b99b7c2770d7180fa1e2a9c2309c824a006e5cae9ef92875413d6018c9749
MD5 82b80245870fabf8f794c342bc0483b1
BLAKE2b-256 3147876fcefa386d1a9a8141d7c69cc4a2961e51a0c33c8fc83ce5e72becc6b9

See more details on using hashes here.

File details

Details for the file commonlog-0.1.5-py3-none-any.whl.

File metadata

  • Download URL: commonlog-0.1.5-py3-none-any.whl
  • Upload date:
  • Size: 6.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for commonlog-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 e820e4df38f55f8015907c5e977a8740c3f2c91656db2f0db45fbc2ecb15b5d5
MD5 098d159d942817974289e97a5d1e204a
BLAKE2b-256 13bc8bcdbf36322725214aaa445a661715a7d372e340cf6908d117b841fb33d5

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