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_2-1.0.0.tar.gz (4.9 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_2-1.0.0-py3-none-any.whl (8.6 kB view details)

Uploaded Python 3

File details

Details for the file loki_console_logger_python_2-1.0.0.tar.gz.

File metadata

File hashes

Hashes for loki_console_logger_python_2-1.0.0.tar.gz
Algorithm Hash digest
SHA256 163e71110b31cfff73aa039648f29da23cc52c202786cb694ec72176af267f48
MD5 292815dfa2c154775d6be50fb050ff96
BLAKE2b-256 4afa00fb97c704faed12120f267918b0d15ae19233fc3ee739eced0406d74f49

See more details on using hashes here.

File details

Details for the file loki_console_logger_python_2-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for loki_console_logger_python_2-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f6bcc93005d29aeaa7cc09106d068494f5831a020c00ff2bf27278956b639442
MD5 9535a282a1df1f98d42484cbe1d7cc17
BLAKE2b-256 8c61aa969247b418040e14bb21b6a5aeb2863184a245c20586343304c753a3d6

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