DC Logger
A flexible, async-first structured logging library for Python with support for multiple handlers, cloud providers, distributed tracing, and multi-tenancy.
Features
- Async-first design - Non-blocking logging for high-performance applications
- Structured logging - JSON-based logs with entities, actions, and context
- Multiple handlers - Console, file, and cloud output simultaneously
- Cloud integrations - Datadog, AWS CloudWatch, GCP, Azure support
- LangSmith observability - Stream structured logs alongside LangChain traces
- Distributed tracing - Built-in correlation with trace/span IDs
- Decorator logging - Automatic function entry/exit logging with
@log_call - Multi-tenant support - Tenant context for SaaS applications
- Colored console output - ANSI colors for better visibility
Installation
pip install dc_logger
# With Datadog support
pip install dc_logger[datadog]
# With LangSmith support
pip install dc_logger[langsmith]
# With all extras
pip install dc_logger[all]
Quick Start
import asyncio
from dc_logger import DCLogger, ConsoleLogConfig, LogLevel
async def main():
config = ConsoleLogConfig(level=LogLevel.INFO)
logger = DCLogger(config, "my_app")
await logger.info("Application started")
await logger.warning("This is a warning")
await logger.error("Something went wrong")
await logger.close()
asyncio.run(main())
Using the Decorator
from dc_logger import log_call
@log_call(action_name="process", include_params=True)
async def process_data(data_id: str):
# Automatically logs entry, exit, duration, and errors
return {"status": "processed"}
Structured Logging with Context
from dc_logger import LogEntity
entity = LogEntity(type="dataset", id="ds_123", name="Sales Data")
await logger.info(
"Dataset processed",
entity=entity,
action="process_dataset",
duration_ms=1500,
extra={"rows": 10000}
)
Multi-Handler Configuration
from dc_logger import create_console_file_config
config = create_console_file_config(
file_path="logs/app.log",
level=LogLevel.INFO,
pretty_print=True
)
logger = DCLogger(config, "my_app")
Documentation
| Document | Description |
|---|---|
| USAGE.md | Comprehensive usage guide |
| API_REFERENCE.md | Complete API documentation |
| docs/getting-started.md | Step-by-step introduction |
| docs/configuration.md | Configuration options |
| docs/best-practices.md | Recommended patterns |
| examples/ | Working example scripts |
For AI Agents
See .ai/context.md for a quick reference guide optimized for AI agents.
Key Components
| Component | Import | Description |
|---|---|---|
DCLogger |
from dc_logger import DCLogger |
Main logger class |
ConsoleLogConfig |
from dc_logger import ConsoleLogConfig |
Console configuration |
LogLevel |
from dc_logger import LogLevel |
Log levels (DEBUG, INFO, etc.) |
LogEntity |
from dc_logger import LogEntity |
Entity context for logs |
HTTPDetails |
from dc_logger import HTTPDetails |
HTTP request details |
log_call |
from dc_logger import log_call |
Function logging decorator |
get_logger |
from dc_logger import get_logger |
Get global logger |
correlation_manager |
from dc_logger import correlation_manager |
Distributed tracing |
Log Levels
LogLevel.DEBUG # Detailed debugging information
LogLevel.INFO # General informational messages
LogLevel.WARNING # Warning messages for potential issues
LogLevel.ERROR # Error messages for failures
LogLevel.CRITICAL # Critical errors requiring immediate attention
Cloud Integrations
Datadog
from dc_logger import create_console_datadog_config
config = create_console_datadog_config(
datadog_api_key="your-api-key",
datadog_service="my-service",
datadog_env="production"
)
LangSmith
from dc_logger import create_console_langsmith_config
config = create_console_langsmith_config(
api_key="your-langsmith-api-key",
project_name="observability",
tags=["dc_logger", "staging"]
)
logger = DCLogger(config, "my_app")
Architecture
See documentation/architecture.md for design details.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Author
Jae Wilson (@jaewilson07)
Metadata
Release files for dc-logger 1.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| dc_logger-1.2.1.tar.gz | 56.0 kB | Without provenance | Details for dc_logger-1.2.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| dc_logger-1.2.1-py3-none-any.whl | Python 3 | none | any | Details for dc_logger-1.2.1-py3-none-any.whl |
Total release size: 121.7 kB
Release files / dc_logger-1.2.1.tar.gz
| Download URL | dc_logger-1.2.1.tar.gz |
|---|---|
| Size | 56.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
90507c8e38ca691514447062520aaa3a84493e577be55a2e74e45eee86f0e075
|
|
BLAKE2b-256 checksum How to use checksums |
db6d8e58e00abf2e8407af6e32c4121309c74750b121a4b40c06eb7b747be676
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / dc_logger-1.2.1-py3-none-any.whl
| Download URL | dc_logger-1.2.1-py3-none-any.whl |
|---|---|
| Size | 65.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
bcf513200be940963050a0bd1ad38ba76eb9f986447956d3f2a274c46e9c0c9c
|
|
BLAKE2b-256 checksum How to use checksums |
02e143aaf34843c47935d553c9b68334d08c85bdb2cc1eba48c24e53dfd563b3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Security for dc-logger 1.2.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.