Unified logging utilities for Laplace applications
Project description
laplace_log
A small, opinionated logging helper built on top of Python’s standard logging module.
laplace_log is designed for multi-module / multi-process scientific or application projects where you want:
- One central logger initialization
- Logs from your app + third‑party libraries
- Clear application names in logs (e.g.
laplace.opt) - Automatic daily log folders
- Simple
log.info(...)usage everywhere print()statements captured into logs
No magic, no external dependencies — just structured, predictable logging.
Features
- ✅ Root logger configuration (captures library logs)
- ✅ Application‑named logger (
app_name) - ✅ File + console handlers with independent levels
- ✅ Automatic folder structure:
logs/YYYY-MM-DD/app_name.log - ✅
print()andstderrredirection into logs - ✅ Simple
log.info(...)helper available everywhere - ✅ Singleton design (initialize once, use everywhere)
Installation
Install with pip:
pip install laplace-log
Quick Start
1. Initialize the logger once (entry point)
from laplace_log.log_lhc import LoggerLHC, log
LoggerLHC(
app_name="laplace.opt",
file_level="debug",
console_level="info",
)
log.info("Starting OptWindow...")
2. Use logging anywhere
from laplace_log.log_lhc import log
log.debug("Debug message")
log.info("Information")
log.warning("Something looks odd")
log.error("Something went wrong")
No need to pass logger instances around.
Log Output Example
2026-01-20 10:21:47 [INFO] [laplace.opt] Starting OptWindow...
2026-01-20 10:21:48 [WARNING] [numpy] overflow encountered in exp
2026-01-20 10:21:49 [INFO] [root] A print statement
- App logs use your
app_name - Library logs keep their original logger names
- print() statements appear as
root
Folder Structure
logs/
└── 2026-01-20/
└── laplace_opt.log
- A new folder is created each day
- Dots in
app_nameare replaced by underscores for filenames
Design Overview
Root logger
The root logger is configured with:
- File handler (persistent logs)
- Console handler (stdout)
This ensures all third‑party libraries are captured automatically.
Application logger
Each app uses its own named logger:
logging.getLogger("laplace.opt")
This name appears in log records and helps identify the source clearly.
The log Helper
log is a lightweight helper object:
from laplace_log.log_lhc import log
log.info("Hello")
Internally, it forwards calls to the initialized LoggerLHC instance.
If logging is used before initialization, an explicit error is raised:
RuntimeError: Logger not initialized! Call LoggerLHC(app_name, ...) first.
This avoids silent failures.
Print Redirection
All print() and sys.stderr output is redirected:
- Printed normally to the console
- Also logged at
INFOlevel via the root logger
This is useful for:
- Legacy code
- Debug prints
- Third‑party libraries using
print
Configuration Options
LoggerLHC(
app_name: str,
log_root: Path | str | None = None,
file_level: str = "debug",
console_level: str = "info",
)
| Parameter | Description |
|---|---|
app_name |
Logical name of your application (laplace.opt, lapalce.server, …) |
log_root |
Base folder for logs (default: current working directory) |
file_level |
Minimum level written to file |
console_level |
Minimum level printed to console |
Intended Use Cases
- Scientific applications (optimization, simulations)
- Multi‑process systems (master / worker / optimizer)
- GUI + backend projects
- Long‑running experiments
- Any project needing clean, centralized logs
What This Is Not
- ❌ A replacement for
logging - ❌ A framework
- ❌ A distributed logging system
It is a thin, explicit convenience layer.
License
GPL-3.0 license
Philosophy
Logging should be boring, explicit, and predictable.
laplace_log exists to remove boilerplate while keeping full control.
If you understand Python logging, this library will never surprise you.
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
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 laplace_log-0.1.0.tar.gz.
File metadata
- Download URL: laplace_log-0.1.0.tar.gz
- Upload date:
- Size: 17.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
38716cac500860979b781368a5635136a803984e82941673a99e0e22ead2084c
|
|
| MD5 |
5b9ecb96d85fdc153e0e6dd2a20d944e
|
|
| BLAKE2b-256 |
3af32992f67d5891a812263569470518f3a2d3932be4d32186870005c023aa64
|
File details
Details for the file laplace_log-0.1.0-py3-none-any.whl.
File metadata
- Download URL: laplace_log-0.1.0-py3-none-any.whl
- Upload date:
- Size: 18.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8df14fa10b8c909a0bd579a622abf0ca1810ecd43b83b6cd1a6f6ce65b6cbfb8
|
|
| MD5 |
dac008a033e74070f91ab19d80a7b9d9
|
|
| BLAKE2b-256 |
99330f985f0bda65dbd20b3befd253328b5e0698160e5ffbe253beb2e420615d
|