app-logs-ai
Python SDK for AI Application Logs. Batches log entries and ships them to the ingest API.
Install
pip install app-logs-ai
Quick Start
from app_logs_ai import create_logger
logger = create_logger({
"api_key": "your-api-key-here",
})
logger.info("Server started", {"port": 8000})
logger.error("Database connection failed", {"error": "ECONNREFUSED"})
Configuration
Options passed to create_logger():
api_key(required): Your project's API keyendpoint: Ingest endpoint URL (defaults to https://api-app-logs.up.railway.app/v1/ingest)batch_size: Flush when this many entries are buffered (default: 20)flush_interval_ms: Flush at most this often in milliseconds (default: 2000)source: Logical source label (default: "backend")max_buffer_size: Max entries kept in memory (default: 10000)max_retries: Send attempts per flush before re-queueing (default: 4)retry_backoff_ms: Base delay for exponential backoff (default: 500)gzip_threshold: Compress payloads larger than this (bytes, 0 to disable, default: 1024)persist_path: File path for crash-durable buffering (optional)flush_on_exit: Auto-flush on SIGTERM/SIGINT (default: True)fallback_to_stderr: Print undelivered logs to stderr (default: True)enable_metrics_heartbeat: Send periodic metrics (default: True)metrics_heartbeat_ms: Metrics interval in milliseconds (default: 15000)
Log Levels
The logger supports these levels:
debug(message, attributes)info(message, attributes)warn(message, attributes)error(message, attributes)fatal(message, attributes)
The generic log(level, message, attributes) method is also available.
Durability
- Batching: Entries are buffered and sent every 2 seconds or when 20 entries accumulate
- Retries: Failed sends are retried with exponential backoff
- Persistence: With
persist_pathset, undelivered entries survive process restarts - Graceful shutdown: Automatic flush on exit; call
logger.flush()to ensure delivery
Example with FastAPI
See examples/fastapi-app/ for a complete example application.
from fastapi import FastAPI
from app_logs_ai import create_logger
import os
app = FastAPI()
logger = create_logger({"api_key": os.environ.get("APP_LOGS_KEY", "test-key")})
@app.get("/api/users")
async def get_users():
logger.info("Fetching users", {"endpoint": "/api/users"})
return {"users": []}
@app.exception_handler(Exception)
async def exception_handler(request, exc):
logger.error("Unhandled exception", {
"path": str(request.url),
"error": str(exc),
})
return {"error": str(exc)}
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
app_logs_ai-0.1.0.tar.gz
(5.3 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file app_logs_ai-0.1.0.tar.gz.
File metadata
- Download URL: app_logs_ai-0.1.0.tar.gz
- Upload date:
- Size: 5.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f9a3edf4b9a46b949a5706dd64204f0fa78b7ac7c26a55e55de2bb3c51955ef5
|
|
| MD5 |
205843f97a3f3ab2facff99d54cd3b88
|
|
| BLAKE2b-256 |
45b18a73300f15679b18917bd3abb17f68e595294cb7fe52ce9f74341cec76be
|
File details
Details for the file app_logs_ai-0.1.0-py3-none-any.whl.
File metadata
- Download URL: app_logs_ai-0.1.0-py3-none-any.whl
- Upload date:
- Size: 5.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5bd140c3dbb5f3504de6638a78ec213cd3a36f72195b0bac5680e0c2860c49b9
|
|
| MD5 |
894327d3b67e26c48ad0c059f49e33de
|
|
| BLAKE2b-256 |
4e91eea73784242cc5896ddfd032c6c991075efa631fd19d2b9b77c7fa9e184f
|