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.2.tar.gz (59.5 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.2-py3-none-any.whl (26.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: fastlog_io-0.3.2.tar.gz
  • Upload date:
  • Size: 59.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.5 {"installer":{"name":"uv","version":"0.10.5","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.2.tar.gz
Algorithm Hash digest
SHA256 eadf345b791a93620e1ec41340a535360accb03160130d1b362e18c0f60b5ea0
MD5 75bae2142a3861b4ad127c9315f52e3e
BLAKE2b-256 d22138a1d395b2347ebd25e7a780ce49bbda0b3d1af578265a077c7bfd863c1d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fastlog_io-0.3.2-py3-none-any.whl
  • Upload date:
  • Size: 26.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.5 {"installer":{"name":"uv","version":"0.10.5","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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 d5de646f2032ec36add2551ad9a272ced2dbd0efec6643235fb8064c2d9b36d7
MD5 a262e5942f5987ec51ca0c3f7905abd4
BLAKE2b-256 b92dbc71be55c9fc2a0fb0facecd0dd0d60ca1392e769747b6842da1e0f08d23

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