Skip to main content

Minimal async logger with Telegram transport

Project description

FemtoLogger (Python)

Minimal async logger with Telegram transport for Python.

Install

pip install femtologger

Required env vars

TELEGRAM_BOT_TOKEN=<bot token from @BotFather>
TELEGRAM_CHAT_ID=<chat id from @userinfobot>

Usage

import asyncio
from femtologger import FemtoLogger, TelegramTransport

logger = FemtoLogger(
    transports=[
        TelegramTransport(
            token="your-bot-token",
            chat_id="your-chat-id",
        ),
    ],
)

async def main():
    await logger.info("User signed up", {"userId": 42})
    await logger.warn("Rate limit approaching", {"current": 95, "max": 100})
    await logger.error("Payment failed", {"orderId": "abc", "reason": "declined"})

asyncio.run(main())

API

FemtoLogger

FemtoLogger(*, transports: list[Transport], level: LogLevel = "info")
Parameter Type Default Description
transports list[Transport] required List of transport instances
level "info" | "warn" | "error" "info" Minimum log level

Methods: logger.info(message, metadata?), logger.warn(message, metadata?), logger.error(message, metadata?). All are async and return None.

TelegramTransport

TelegramTransport(*, token: str, chat_id: str | int, parse_mode: str = "HTML", disable_web_page_preview: bool = True)
Parameter Type Default
token str required
chat_id str | int required
parse_mode str "HTML"
disable_web_page_preview bool True

Custom transport

Implement the Transport protocol:

from femtologger import Transport, LogEntry

class MyTransport:
    async def send(self, entry: LogEntry) -> None:
        # entry.level: "info" | "warn" | "error"
        # entry.message: str
        # entry.metadata: dict[str, object] | None
        # entry.timestamp: datetime
        # IMPORTANT: catch errors internally, never raise
        pass

Key behaviors

  • Logger never raises at runtime — transport errors are caught and logged to stderr
  • Multiple transports are dispatched in parallel via asyncio.gather(..., return_exceptions=True)
  • Single runtime dependency (httpx), requires Python >= 3.10

License

MIT

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

femtologger-0.1.1.tar.gz (29.0 kB view details)

Uploaded Source

Built Distribution

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

femtologger-0.1.1-py3-none-any.whl (6.8 kB view details)

Uploaded Python 3

File details

Details for the file femtologger-0.1.1.tar.gz.

File metadata

  • Download URL: femtologger-0.1.1.tar.gz
  • Upload date:
  • Size: 29.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for femtologger-0.1.1.tar.gz
Algorithm Hash digest
SHA256 5cdd2f796d7d2ba99510b6207c949d1ca41810633a134740e04316212f9be22a
MD5 3e02ee3cb9445cfb053ce5c76275be9c
BLAKE2b-256 4cca621b742a86e29bf80cb6f1638ffb70ca7d49e31f7c61ce4a20eb45d8e9e5

See more details on using hashes here.

Provenance

The following attestation bundles were made for femtologger-0.1.1.tar.gz:

Publisher: ci.yml on frederictriquet/FemtoLogger-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file femtologger-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: femtologger-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 6.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for femtologger-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 45419d0b4e5c20aa0fd3ff47598cf34fbb2f3977e699da9bd59f6abd5e2f2390
MD5 3854e32d52d70dfa0d057daa7018ed28
BLAKE2b-256 45443f9c35444f87662996966cd2fcf82f47a987788a6ea2ab4da0a9572e7120

See more details on using hashes here.

Provenance

The following attestation bundles were made for femtologger-0.1.1-py3-none-any.whl:

Publisher: ci.yml on frederictriquet/FemtoLogger-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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