Lightweight SDK + Server for log_center — decorator-based instrumentation with HTTP/gRPC/Celery delivery, multi-backend storage, and search UI.
Project description
Lightweight SDK + Centralized Log Service + AI Agent
Auto-capture · Multi-transport · Multi-backend · MCP for AI · Built-in Agent
English | 中文 | 日本語 | Français | Deutsch | Español
Overview
IKC Log Center is a lightweight, Python-first logging platform consisting of a Client SDK and a Central Server:
- SDK — decorator-based auto-instrumentation with structured JSON logs, delivered via HTTP / gRPC / Celery.
- Server — receives, stores, and searches logs with pluggable backends (SQLite / MySQL / PostgreSQL / Elasticsearch), plus a built-in React Web UI, MCP server for AI agents, Bearer Token authentication, and an embedded AI Agent for intelligent log analysis.
App (SDK) ──HTTP/gRPC/Celery──▶ Log Center Server ──▶ SQLite / MySQL / PG / ES
│
┌─────────────────────┼─────────────────────┐
│ │ │
Web UI AI Agent MCP Server
(React SPA) (LangGraph) (stdio / SSE)
│ │ │
Token Auth Work Modes External AI Tools
auto / approval Claude Code · Codex
Cursor · Windsurf
│
┌────────┴────────┐
│ │
Git Repos Business DBs
(read-only) MySQL · PG · Oracle
Features
| Category | Highlights |
|---|---|
| Auto-capture | @instrumented decorator — duration, status, args logging with slow-call detection |
| Multi-transport | HTTP POST, gRPC unary, Celery task — combinable via env var |
| Multi-backend | SQLite (zero-config), MySQL, PostgreSQL, Elasticsearch |
| Trace analysis | Distributed trace_id / span_id propagation across FastAPI, Flask, Celery |
| Web UI | React-based search, dashboard, trace chain visualization, token management |
| MCP for AI | Expose log search as MCP tools — compatible with Claude Code, Codex, Cursor, Windsurf & more |
| AI Agent | Built-in LangGraph agent — log analysis, Git repo reading, DB queries, artifact generation |
| Auth | OpenAI-style sk-lc-* Bearer tokens with SHA-256 hash storage |
| Ops-friendly | Rotating file logs, 7-day retention, shell scripts, CLI tools |
Installation
# Client SDK only
pip install ikc-log-center # HTTP delivery (default)
pip install ikc-log-center[grpc] # + gRPC delivery
pip install ikc-log-center[celery] # + Celery delivery
pip install ikc-log-center[fastapi] # + FastAPI middleware
pip install ikc-log-center[flask] # + Flask hooks
# Server
pip install ikc-log-center[server] # HTTP server + SQLite
pip install ikc-log-center[mcp] # + MCP server
pip install ikc-log-center[agent] # + AI Agent (LangGraph)
pip install ikc-log-center[server,mysql] # + MySQL backend
pip install ikc-log-center[server,pg] # + PostgreSQL backend
# Everything
pip install ikc-log-center[all]
Quick Start
1. Start the Server
# HTTP API on :9315 (SQLite storage, zero config)
log-center-server
# With gRPC (:9316) and Web UI
log-center-server --grpc --ui
# Or use shell scripts
./start-log-center.sh
./show-log-center.sh
./stop-log-center.sh
2. Instrument Your App
from log_center_sdk import configure, instrumented
configure(module_name="my_app")
@instrumented("process_order", slow_threshold_ms=500)
def process_order(order_id: str, amount: float):
...
@instrumented("llm_call", log_args={"model"}, redact_args={"api_key"})
async def call_llm(prompt: str, model: str, api_key: str):
...
Enable remote delivery:
LOG_CENTER_ENABLE=true \
LOG_CENTER_URL=http://localhost:9315 \
python my_app.py
3. Framework Integrations
FastAPI:
from log_center_sdk.integrations.fastapi import TraceMiddleware
app.add_middleware(TraceMiddleware)
Flask:
from log_center_sdk.integrations.flask import init_trace_hooks
init_trace_hooks(app)
Celery Workers:
from log_center_sdk import patch_celery_app
patch_celery_app(app) # auto-reinit handlers after fork
Delivery Modes
| Mode | Protocol | Port | Best For |
|---|---|---|---|
api |
HTTP POST JSON | 9315 | Cross-network, external apps |
grpc |
gRPC unary JSON bytes | 9316 | Low-latency internal network |
celery |
Redis queue + send_task | 6379 | Apps with existing Celery |
Combine modes: LOG_CENTER_DELIVERY=grpc,api
MCP Server (AI Agent Ready)
Expose log search capabilities as MCP tools. Works with the built-in AI Agent and any external MCP-compatible tool:
pip install ikc-log-center[mcp]
log-center-mcp
External Tool Integration
Connect your favorite AI dev tools to Log Center via MCP:
Claude Code / Codex CLI (~/.claude/mcp.json or mcp_servers.json):
{
"mcpServers": {
"log-center": {
"command": "log-center-mcp",
"env": {
"LOG_CENTER_URL": "http://localhost:9315",
"LOG_CENTER_TOKEN": "sk-lc-xxxxx"
}
}
}
}
Cursor / Windsurf (Settings → MCP Servers):
{
"log-center": {
"command": "log-center-mcp",
"env": {
"LOG_CENTER_URL": "http://localhost:9315"
}
}
}
Once connected, you can ask your AI assistant:
- "Search for ERROR logs in the last hour"
- "Find all logs for trace_id abc-123"
- "Show slow calls (>500ms) from module payment"
AI Agent
Built-in intelligent assistant powered by LangGraph, capable of log analysis, Git repository reading, database queries, and file artifact generation.
pip install ikc-log-center[agent]
log-center-server --agent
| Capability | Description |
|---|---|
| Log analysis | Search and analyze logs via MCP tools |
| Git repos | Clone & read repositories (read-only, write ops blocked) |
| Database queries | MySQL / PostgreSQL / Oracle — forced read-only |
| Artifacts | Generate downloadable files (reports, code, etc.) |
| Work modes | auto (tools run automatically) or approval (human-in-the-loop confirmation) |
| Memory | Conversation memory with auto-extraction of key facts |
Safety: Git write operations (commit, push, add, reset) and all database write operations (INSERT, UPDATE, DELETE, DDL) are strictly blocked.
Authentication
OpenAI-style Bearer Token auth. Tokens (sk-lc-<48 hex>) are stored as SHA-256 hashes; plaintext is shown only once at creation.
# Generate a token
log-center-server --gen-token "production server"
# List / revoke tokens
log-center-server --list-tokens
log-center-server --revoke-token "sk-lc-a1b2"
# Start server with auth enabled
LOG_CENTER_AUTH_ENABLED=true log-center-server --ui
Client SDK carries the token:
LOG_CENTER_TOKEN=sk-lc-xxxxx LOG_CENTER_ENABLE=true LOG_CENTER_URL=http://server:9315 python my_app.py
/health,/docs,/openapi.jsonare always auth-free.
Storage Backends
| Backend | LOG_CENTER_STORE |
Extra Deps |
|---|---|---|
| Local file + SQLite | local (default) |
— |
| MySQL | mysql |
[mysql] |
| PostgreSQL | pg |
[pg] |
| Elasticsearch | es |
— |
Local file logging is always active regardless of backend choice.
API Endpoints
| Endpoint | Method | Description |
|---|---|---|
/ingest |
POST | Ingest single or batch JSON logs |
/search |
GET | Query by trace_id / level / message_substr / limit |
/health |
GET | Health check (auth-free) |
/docs |
GET | OpenAPI docs (auth-free) |
Environment Variables
Client SDK
| Variable | Default | Description |
|---|---|---|
LOG_CENTER_ENABLE |
false |
Enable remote log delivery |
LOG_CENTER_DELIVERY |
api |
Delivery mode: api / grpc / celery / comma-combined |
LOG_CENTER_URL |
— | HTTP delivery URL (e.g. http://log-center:9315) |
LOG_CENTER_GRPC_ADDR |
— | gRPC address (e.g. log-center:9316) |
LOG_CENTER_CELERY_BROKER |
redis://localhost:6379/0 |
Celery broker URL |
LOG_CENTER_TIMEOUT |
2 |
Delivery timeout (seconds) |
LOG_CENTER_QUEUE |
1000 |
In-memory queue size |
LOG_CENTER_BATCH |
50 |
Batch size |
LOG_CENTER_TOKEN |
— | Bearer token (required when server auth is on) |
LOG_LEVEL |
INFO |
Log level |
LOG_JSON |
true |
JSON format output |
LOG_FILE_PATH |
logs/{module}.log |
Log file path |
LOG_FILE_MAX_MB |
500 |
Max file size (MB) |
LOG_FILE_BACKUP |
3 |
Rotation backup count |
LOG_FILE_RETENTION_DAYS |
14 |
Retention days |
Server
| Variable | Default | Description |
|---|---|---|
LOG_CENTER_PORT |
9315 |
HTTP API port |
LOG_CENTER_HOST |
0.0.0.0 |
Bind address |
LOG_CENTER_GRPC_PORT |
9316 |
gRPC port |
LOG_CENTER_STORE |
local |
Backend: local / sqlite / mysql / pg / es |
LOG_CENTER_DB_PATH |
data/log_center/log_center.db |
SQLite database path |
LOG_CENTER_AUTH_ENABLED |
false |
Enable Bearer Token auth |
LOG_CENTER_MYSQL_HOST/PORT/USER/PASSWORD/DB |
— | MySQL connection |
LOG_CENTER_PG_HOST/PORT/USER/PASSWORD/DB |
— | PostgreSQL connection |
LOG_CENTER_ES_ENDPOINT |
— | Elasticsearch endpoint URL |
LOG_CENTER_ES_INDEX |
log-center |
ES index name |
LOG_CENTER_CORS_ORIGINS |
* |
Allowed CORS origins |
LOG_CENTER_FORWARD_URLS |
— | Forward target URLs (comma-separated) |
LOG_CENTER_AGENT_MODEL |
gpt-4o |
Agent LLM model name |
LOG_CENTER_AGENT_BASE_URL |
— | LLM API base URL |
LOG_CENTER_AGENT_API_KEY |
— | LLM API key |
LOG_CENTER_AGENT_WORK_MODE |
auto |
Agent work mode: auto / approval |
LOG_CENTER_AGENT_RECURSION_LIMIT |
1000 |
Max tool-call rounds per turn |
License
This project is licensed under the MIT License.
Copyright (c) IKC Team. You are free to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, subject to inclusion of the copyright and license notices. The software is provided "as is", without warranty of any kind.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
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 ikc_log_center-1.4.1.tar.gz.
File metadata
- Download URL: ikc_log_center-1.4.1.tar.gz
- Upload date:
- Size: 581.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c4493818db8d353b332f6c64c7f7e41b99cd91ea1cf6835b124b38f6a710ab5d
|
|
| MD5 |
d74964ee1656559762cad75131ab9f3a
|
|
| BLAKE2b-256 |
d4d72f11dc0503738d2c67a8a4907c4b85ad3df0905ae1f7869fea4096e0112b
|
File details
Details for the file ikc_log_center-1.4.1-py3-none-any.whl.
File metadata
- Download URL: ikc_log_center-1.4.1-py3-none-any.whl
- Upload date:
- Size: 80.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bdc0ea196014a0125f19b225e2b5235a1a5a90b515f0f365ac2f7115b431ef72
|
|
| MD5 |
9f27e7a053319877c52a5ed794bf5979
|
|
| BLAKE2b-256 |
0a41cadf269023fb4ff8aaa33953c11e0c4dc3781c5edba61fcbc99e7b26f42f
|