Skip to main content

Ultra-performant Loki logger for Python applications async (FastAPI, asyncio) and sync (scripts, Django, etc.) environments.

Project description

Loki Console Logger for Python 🚀

A high-performance console logger for Python that automatically sends all print, logging, unhandled exceptions, and custom events to Grafana Loki — powered by asyncio + aiohttp.

✅ Ideal for microservices, observability pipelines, cloud apps, and scripts.

🌀 Compatible with both async (FastAPI, asyncio) and sync (scripts, Django, etc.) environments.


✨ Features

  • ⚡ Ultra-performant (fully async using aiohttp)
  • 🧠 Dynamic + static labels support (e.g., env, hostname, region)
  • 🧹 Batching + auto-flush for performance and throughput
  • 🔗 Automatically captures:
    • print(...) calls
    • logging messages
    • uncaught exceptions
  • 🔒 Optional Authorization header + multi-tenancy (X-Scope-OrgID)
  • 🧱 Zero external dependencies (only aiohttp)
  • 🧘 Safe fallback for synchronous apps (auto flush on shutdown)

📦 Installation

pip install loki-console-logger-python

🚀 Quickstart (Async Example)

from loki_console_logger_python import LokiLogger
from loki_console_logger_python.config import LokiLoggerOptions

options = LokiLoggerOptions(
    url="https://loki.elvenobservability.com/loki/api/v1/push",
    tenant_id="your-tenant-id",
    app_name="my-app",
    auth_token="your-optional-token",
    labels={"env": "production"},
    dynamic_labels={"hostname": lambda: "my-host"},
)

logger = LokiLogger(options)

# Track custom events
logger.track_event("user_signup", {"user_id": 123})

# This will be captured automatically
print("✅ Hello from Python!")

# This will also be captured
import logging
logging.info("App started")

# So will uncaught exceptions
raise RuntimeError("Simulated failure")

🧱 Example with FastAPI

from fastapi import FastAPI
from loki_console_logger_python import LokiLogger
from loki_console_logger_python.config import LokiLoggerOptions

app = FastAPI()

logger = LokiLogger(LokiLoggerOptions(
    url="https://loki.elvenobservability.com/loki/api/v1/push",
    tenant_id="elven",
    app_name="fastapi-app",
    labels={"env": "staging"},
    dynamic_labels={"hostname": lambda: "api-node-1"},
))

@app.get("/ping")
def ping():
    print("Ping received!")
    logger.track_event("ping", {"status": "ok"})
    return {"message": "pong"}

🐍 Example with Synchronous Script

from loki_console_logger_python import LokiLogger
from loki_console_logger_python.config import LokiLoggerOptions

logger = LokiLogger(LokiLoggerOptions(
    url="https://loki.elvenobservability.com/loki/api/v1/push",
    tenant_id="elven",
    app_name="data-script",
    labels={"env": "batch"},
))

print("Running ETL script...")

try:
    raise ValueError("Unexpected value")
except Exception:
    pass

logger.track_event("script_end", {"status": "completed"})

# Optional: force flush for long-running tasks
logger.flush_sync()

⚙️ Configuration Options

Option Description Default
url Full Loki Push API URL
tenant_id Value for X-Scope-OrgID (multi-tenancy)
app_name Used as a label in logs
auth_token Optional Bearer token None
batch_size Max logs before flush 10
flush_interval Seconds between auto-flush 2
labels Fixed labels (e.g., env, service) {}
dynamic_labels Runtime-evaluated labels (e.g., hostname) {}

🤝 Contributing

Contributions are very welcome — new features, bug fixes, or ideas.

Let's make observability in Python awesome together! 🛠️

  1. Fork the repository
  2. Create a new branch (git checkout -b feat/my-feature)
  3. Open a pull request

📄 License

Licensed under the MIT License.

Created with ❤️ by Leonardo Zwirtes

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

loki_console_logger_python-1.0.11.tar.gz (5.1 kB view details)

Uploaded Source

Built Distribution

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

loki_console_logger_python-1.0.11-py3-none-any.whl (9.3 kB view details)

Uploaded Python 3

File details

Details for the file loki_console_logger_python-1.0.11.tar.gz.

File metadata

File hashes

Hashes for loki_console_logger_python-1.0.11.tar.gz
Algorithm Hash digest
SHA256 68e64dc64f23ca09d00e9ea69bd2d835c3c24337c760a98b45ffa10cbf0f245f
MD5 b78145c0c8fc901596e9d7229f7685ff
BLAKE2b-256 7df3c594abc96bfd74b8d7dd95920481b8ba297d867ae92baa9871908ac18265

See more details on using hashes here.

File details

Details for the file loki_console_logger_python-1.0.11-py3-none-any.whl.

File metadata

File hashes

Hashes for loki_console_logger_python-1.0.11-py3-none-any.whl
Algorithm Hash digest
SHA256 71650329b46242ef1231641bb852f0bbc4c355f8edca8d563ceee2d080d926af
MD5 971ffa420791eea9541a3faf86f45e03
BLAKE2b-256 25ad0d3c266a1a4d3957128a8c70a39f392f7f546a8216206ffa0967ef69d766

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