Skip to main content

Official Timberlogs SDK for Python - structured logging made simple

Project description

Timberlogs Python SDK

The official Timberlogs SDK for Python applications. Send structured logs to Timberlogs with automatic batching, retry logic, and flow tracking.

Installation

pip install timberlogs-client

Quick Start

from timberlogs import create_timberlogs

timber = create_timberlogs(
    source="my-app",
    environment="production",
    api_key="tb_live_xxxxxxxxxxxxx",
)

timber.info("Hello, Timberlogs!")

Features

  • Structured logging - Log with arbitrary JSON data
  • Automatic batching - Efficiently batch logs before sending
  • Retry with backoff - Automatic retry on failures
  • Flow tracking - Group related logs together
  • Level filtering - Filter logs by severity
  • Async support - Full async/await support
  • Context manager - Automatic cleanup with with statement

Basic Usage

Log Levels

timber.debug("Detailed diagnostic info", {"key": "value"})
timber.info("General information", {"user_id": "123"})
timber.warn("Warning condition", {"threshold": 90})
timber.error("Error occurred", {"code": "E001"})

Logging with Data

timber.info("User signed in", {
    "user_id": "user_123",
    "method": "oauth",
    "provider": "google",
})

Error Logging

# With Exception object (extracts name, message, stack)
try:
    risky_operation()
except Exception as e:
    timber.error("Operation failed", e)

# With data object
timber.error("Validation failed", {
    "field": "email",
    "reason": "invalid format",
})

Tags

from timberlogs import LogOptions

timber.info("Payment processed", {"amount": 99.99}, LogOptions(tags=["payments", "success"]))

Setting User/Session IDs

# Set defaults for all subsequent logs
timber.set_user_id("user_123")
timber.set_session_id("sess_abc")

# Clear on logout
timber.set_user_id(None)
timber.set_session_id(None)

Method Chaining

timber.set_user_id("user_123").set_session_id("sess_abc").info("User action")

Flow Tracking

Flows group related logs together with automatic step indexing:

# Synchronous flow (local ID generation)
flow = timber.flow("checkout")
flow.info("Started checkout", {"items": 3})
flow.info("Payment processed", {"amount": 99.99})
flow.info("Order confirmed", {"order_id": "ord_123"})

Async Flow (Server-Generated ID)

import asyncio

async def process_checkout():
    flow = await timber.flow_async("checkout")
    flow.info("Started checkout")
    flow.info("Payment processed")
    flow.info("Order confirmed")

asyncio.run(process_checkout())

Flow Properties

flow = timber.flow("user-onboarding")
print(flow.id)    # "user-onboarding-a1b2c3d4"
print(flow.name)  # "user-onboarding"

Configuration

All Options

from timberlogs import create_timberlogs

timber = create_timberlogs(
    # Required
    source="my-app",                    # Your app/service name
    environment="production",           # development, staging, production

    # Authentication
    api_key="tb_live_xxx",              # Your Timberlogs API key

    # Optional
    endpoint="https://...",             # Custom endpoint URL
    version="1.2.3",                    # Your app version
    user_id="user_123",                 # Default user ID
    session_id="sess_abc",              # Default session ID
    batch_size=10,                      # Logs to batch before sending
    flush_interval=5.0,                 # Auto-flush interval (seconds)
    min_level="info",                   # Minimum level to send
    on_error=lambda e: print(e),        # Error callback

    # Retry configuration
    max_retries=3,                      # Retry attempts
    initial_delay_ms=1000,              # Initial retry delay
    max_delay_ms=30000,                 # Maximum retry delay
)

Environment Variables

import os
from timberlogs import create_timberlogs

timber = create_timberlogs(
    source="my-app",
    environment=os.getenv("ENVIRONMENT", "development"),
    api_key=os.getenv("TIMBER_API_KEY"),
)

Level Filtering

timber = create_timberlogs(
    source="my-app",
    environment="production",
    api_key="tb_live_xxx",
    min_level="warn",  # Only send warn and error
)

timber.debug("Not sent")  # Filtered
timber.info("Not sent")   # Filtered
timber.warn("Sent")       # Sent
timber.error("Sent")      # Sent

Async Usage

import asyncio
from timberlogs import create_timberlogs

async def main():
    timber = create_timberlogs(
        source="my-app",
        environment="production",
        api_key="tb_live_xxx",
    )

    timber.info("Starting async operation")

    # Create async flow with server-generated ID
    flow = await timber.flow_async("async-job")
    flow.info("Step 1")
    flow.info("Step 2")

    # Async flush
    await timber.flush_async()

    # Async disconnect
    await timber.disconnect_async()

asyncio.run(main())

Async Context Manager

async def main():
    async with create_timberlogs(
        source="my-app",
        environment="production",
        api_key="tb_live_xxx",
    ) as timber:
        timber.info("Auto-flushed on exit")

Context Manager

with create_timberlogs(
    source="my-app",
    environment="production",
    api_key="tb_live_xxx",
) as timber:
    timber.info("Logs are auto-flushed on exit")

Low-Level Logging

For full control over log entries:

from timberlogs import LogEntry

timber.log(LogEntry(
    level="info",
    message="Custom log entry",
    data={"custom": "data"},
    user_id="user_123",
    session_id="sess_abc",
    request_id="req_xyz",
    tags=["important", "billing"],
))

API Reference

TimberlogsClient Methods

Method Description
debug(message, data?, options?) Log debug message
info(message, data?, options?) Log info message
warn(message, data?, options?) Log warning message
error(message, error_or_data?, options?) Log error message
log(entry) Log with full control
flow(name) Create flow (local ID)
flow_async(name) Create flow (server ID)
set_user_id(user_id) Set default user ID
set_session_id(session_id) Set default session ID
flush() Send queued logs immediately
flush_async() Async send queued logs
disconnect() Flush and stop client
disconnect_async() Async flush and stop
should_log(level) Check if level passes filter

Flow Methods

Method Description
debug(message, data?, options?) Log debug message
info(message, data?, options?) Log info message
warn(message, data?, options?) Log warning message
error(message, error_or_data?, options?) Log error message
id Property: flow ID
name Property: flow name

Requirements

  • Python 3.8+
  • httpx >= 0.24.0

License

MIT License - see LICENSE for details.

Links

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

timberlogs_client-1.1.0.tar.gz (16.1 kB view details)

Uploaded Source

Built Distribution

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

timberlogs_client-1.1.0-py3-none-any.whl (11.7 kB view details)

Uploaded Python 3

File details

Details for the file timberlogs_client-1.1.0.tar.gz.

File metadata

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

File hashes

Hashes for timberlogs_client-1.1.0.tar.gz
Algorithm Hash digest
SHA256 38f3726b98890e6649dfc4aaae9298012da3ab97f0a8814179c26fa50cf33765
MD5 bd35652c013dd45303c7fa6b305e8c35
BLAKE2b-256 4a8540553dd16fe6336975014b35cd1223278efe2f8bdf2408d2415ee8419eaa

See more details on using hashes here.

Provenance

The following attestation bundles were made for timberlogs_client-1.1.0.tar.gz:

Publisher: publish.yml on enaboapps/timberlogs-python-sdk

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

File details

Details for the file timberlogs_client-1.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for timberlogs_client-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c241ee082cdb0dc20780802c4b3d94664fbd05b19a0f71ecc078729222895182
MD5 29191948774061ec23caf99b4f0c00ad
BLAKE2b-256 642371bc50f1b5a1ab358f5400ae4504617a830dc6e9996467b856db6305b6b6

See more details on using hashes here.

Provenance

The following attestation bundles were made for timberlogs_client-1.1.0-py3-none-any.whl:

Publisher: publish.yml on enaboapps/timberlogs-python-sdk

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