Skip to main content

loguru fast wrapping supports fastapi

Project description

FastLOG

FastLOG is a lightweight wrapper around Loguru with sensible defaults, automatic trace_id, stdlib logging interception, and a directory watcher that can forward log bursts to HTTP, Telegram, or OTLP.

Features

  • Zero-config logging: from fastlog import log; log.info("hello")
  • Automatic trace_id injection for application logs
  • Simple file logging with rotation and retention via configure()
  • Standard logging records are routed through FastLOG
  • fastlog CLI tails *.log files and forwards high-severity events

Installation

uv add fastlog-io
uv add "fastlog-io[otlp]"

Or with pip:

pip install fastlog-io
pip install "fastlog-io[otlp]"

Requirements:

Quickstart

from fastlog import configure, log

configure(
    level="INFO",
    log_path="./logs/app.log",
    rotation="10 MB",
    retention="7 days",
)

log.info("service started")

with log.trace_ctx():
    log.bind(action="api.call").info("request done")

# or use
import logging
logger = logging.getLogger("my-app")
logger.warning("cache miss")

Example output:

2025-10-13 12:23:00.193 | INFO     | 3hAhb3OFpU7zXKWBwp | ts.<module>:13 | service started
2025-10-13 12:23:00.194 | WARNING  | 1F1FwLwm4Orok0gs0a | [my-app]ts.<module>:16 | cache miss
2025-10-13 12:23:00.194 | INFO     | WG8yiDxzO3MCmWy8CB | api.call     | request done

Watcher CLI

The fastlog CLI watches a directory of *.log files, resumes from stored byte offsets, batches matching lines, and sends them to one or more destinations.

uv tool install fastlog-io

# HTTP
uv run fastlog ./logs --endpoint "$FASTLOG_NOTIFY_ENDPOINT"

# Telegram
uv run fastlog ./logs \
  --tg-token "$FASTLOG_NOTIFY_TG_TOKEN" \
  --tg-chat-id "$FASTLOG_NOTIFY_TG_CHAT_ID"

# OTLP
uv run fastlog ./logs --otlp-endpoint "http://127.0.0.1:4318/v1/logs"

Key points:

  • --min-level defaults to WARNING
  • offsets are stored in .multilogwatch.state.json
  • HTTP and Telegram retries default to 3
  • flush() drains queued batches; close() drains and stops workers
  • OTLP uses the native OpenTelemetry exporter configuration model when possible

Run uv run fastlog --help for the full option list.

OTLP Notes

Install fastlog-io[otlp] to enable OTLP export.

  • --otlp-endpoint explicitly overrides the collector endpoint
  • when --otlp-endpoint is unset, FastLOG falls back to OTEL_EXPORTER_OTLP_LOGS_ENDPOINT, then OTEL_EXPORTER_OTLP_ENDPOINT
  • --otlp-protocol, OTEL_EXPORTER_OTLP_LOGS_PROTOCOL, or OTEL_EXPORTER_OTLP_PROTOCOL selects http, grpc, or http/protobuf
  • headers, timeout, TLS, and resource attributes are delegated to the native OpenTelemetry SDK/exporter env handling

Common OTLP env vars:

Variable Description
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT Logs-specific OTLP endpoint
OTEL_EXPORTER_OTLP_ENDPOINT Generic OTLP endpoint fallback
OTEL_EXPORTER_OTLP_LOGS_PROTOCOL http, grpc, or http/protobuf
OTEL_EXPORTER_OTLP_PROTOCOL Generic protocol fallback
OTEL_EXPORTER_OTLP_LOGS_HEADERS Logs-specific request headers
OTEL_EXPORTER_OTLP_LOGS_TIMEOUT Logs-specific exporter timeout
OTEL_SERVICE_NAME Fallback source for resource service.namespace
OTEL_RESOURCE_ATTRIBUTES Extra resource attributes
RUN_ENV / ENV Resource deployment.environment when set
VERSION Resource service.version when set

Common Environment Variables

Variable Default Description
LOG_PATH empty File output path
LOG_LEVEL INFO Default log level
LOG_ROTATION 100 MB Loguru rotation policy
FASTLOG_NOTIFY_ENDPOINT empty HTTP destination for watcher notifications
FASTLOG_NOTIFY_LEVEL WARNING Default watcher threshold
FASTLOG_NOTIFY_TIMEOUT empty HTTP timeout override in seconds
FASTLOG_HTTP_ATTEMPTS empty HTTP and Telegram retry count, default 3
FASTLOG_WINDOW_SECONDS 30 Batch window in seconds
FASTLOG_NOTIFY_MAX_BYTES 4096 Max payload size per request
FASTLOG_NOTIFY_TG_TOKEN empty Telegram bot token
FASTLOG_NOTIFY_TG_CHAT_ID empty Telegram chat id
FASTLOG_OTLP_MAX_BATCH 256 Max records per OTLP export

Development

uv run --with '.[test]' pytest -q
uv build
uv run --with dist/*.whl --with pytest pytest -q

License

MIT © 2025 OWQ

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

fastlog_io-0.3.5.tar.gz (60.1 kB view details)

Uploaded Source

Built Distribution

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

fastlog_io-0.3.5-py3-none-any.whl (26.3 kB view details)

Uploaded Python 3

File details

Details for the file fastlog_io-0.3.5.tar.gz.

File metadata

  • Download URL: fastlog_io-0.3.5.tar.gz
  • Upload date:
  • Size: 60.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for fastlog_io-0.3.5.tar.gz
Algorithm Hash digest
SHA256 d4bb9e81cfe13cd9e4ae6e2f0deb622edd150bdd21cdb67724962c12a948fb81
MD5 86aedef30908ea83293265a79816d9a4
BLAKE2b-256 6a875b2e664ec4a8fbdfbd62c70d22adae2534fdaa8f8790804ef2a3c403038c

See more details on using hashes here.

File details

Details for the file fastlog_io-0.3.5-py3-none-any.whl.

File metadata

  • Download URL: fastlog_io-0.3.5-py3-none-any.whl
  • Upload date:
  • Size: 26.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for fastlog_io-0.3.5-py3-none-any.whl
Algorithm Hash digest
SHA256 2876afa2a8ed8f0afc1e8c3b897de1022f694a20c98cd244c5d842c4105b0bbc
MD5 2fa3be54cedcc71ce60c542ffb316034
BLAKE2b-256 871dc2dda54242d15bedae0a86e85bc239d6a8834caa3cfc1513b7fd896311e8

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