Python Log Router with console, file and HTML facilities
Project description
pylogrouter
pylogrouter is a small library for routing log messages into multiple facilities (console, plain text file, HTML log) via a single API.
Why it exists:
- avoid duplicating
print + file write + html writeacross a codebase; - route one message to all outputs or only selected ones;
- get a readable HTML log for browser viewing (with syntax highlighting for
key=value, quotes, numbers); - keep it safe-by-default (escaping, limits, anti-flood, hardened log targets).
Repository: https://github.com/mykolarudenko/pylogrouter
Install from PyPI (pip)
pip install pylogrouter
Quick start
from pylogrouter import LoggerRouter
logger = LoggerRouter(logger_level="DEBUG", logger_color=True)
logger.add_log_file(
log_handle="file_log",
log_file_path="logs/app.log",
rotate_on_start=True,
rotations_to_keep=2,
)
logger.add_html_log_file(
log_handle="html_dark",
log_file_path="logs/app-dark.html",
title="App Log (Dark)",
html_theme=LoggerRouter.THEME_DARK,
html_auto_refresh_enabled=True,
html_auto_refresh_seconds=3,
rotate_on_start=True,
rotations_to_keep=0,
)
logger.info("Hello to all facilities.")
logger.warning("Only console + html", handles=[LoggerRouter.HANDLE_CONSOLE, "html_dark"])
Screenshots
Console output
Figure 1 — Console output from
example.py mock stream (logger_color=True).
HTML output (dark theme)
Figure 2 — Browser view of the generated HTML log in dark theme (
html_theme="dark").
HTML output (light theme)
Figure 3 — Browser view of the generated HTML log in light theme (
html_theme="light").
Usage / API reference (short)
Singleton model
LoggerRouter is a singleton. Calling the constructor multiple times returns the same instance (and can reconfigure limits).
Facilities and handles
- Each output channel has a string
handle. handles=Noneroutes to all active facilities.handles=["console", "html_dark"]routes only to selected targets.
Levels and “nature”
- Convenience:
logger.debug(...),logger.info(...),logger.warning(...),logger.error(...) - Explicit:
logger.log(message=..., level=..., nature=..., handles=...)
Plain file facility
add_log_file(...)writes to a text file.- Parent directories are created automatically.
- Rotation:
rotate_on_start=Truewithrotations_to_keep=N(startup rotation),- plus size-based rotation: if file exceeds
plain_log_max_file_size_bytes, it rotates usingrotations_to_keep.
HTML facility
add_html_log_file(...)writes a streaming HTML log (open it in a browser).- Options:
html_theme:"dark"or"light"(default:"dark"),html_auto_refresh_enabled: enables<meta http-equiv="refresh">(default:False),html_auto_refresh_seconds: refresh interval when enabled (default:10).
Mock stream
logger.mock_logger_output()emits sample records (useful for previews).
Throttling / anti-flood
If log write rate becomes too high, extra writes in the window are dropped:
max_writes_per_second(default:200)throttle_window_seconds(default:1)
Stats:
stats = logger.get_throttle_stats()
# {"dropped_total": ..., "dropped_by_handle": {...}}
Security model
-
HTML log:
- strict escaping (
escape_html_strict) for all user-controlled fragments; - strict post-render allowlist validation of the produced HTML fragment.
If validation fails, the row is blocked from being written; the logger reports a security incident to console diagnostics and continues.
- strict escaping (
-
Hardened log targets:
- symlink and special files are rejected for file/html targets.
-
Console output:
- control characters (C0/C1) are normalized to avoid malicious ANSI/control sequences.
Safety limits (defaults; override in LoggerRouter(...))
max_message_length:32768max_message_lines:500max_line_length:4096max_log_handles_per_call:64colorize_timeout_ms:15(if colorization exceeds budget, message is still published without syntax coloring)max_html_document_bytes:10485760(10 MiB)max_html_title_length:256max_writes_per_second:200throttle_window_seconds:1plain_log_max_file_size_bytes:209715200(200 MiB)
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 pylogrouter-0.1.5.tar.gz.
File metadata
- Download URL: pylogrouter-0.1.5.tar.gz
- Upload date:
- Size: 15.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0b9b11dbdc346fd29b807f151427361f3c08ce2826bf1741f63d82f99660f121
|
|
| MD5 |
ef4d039dc5d60013b6096ec243c0b95c
|
|
| BLAKE2b-256 |
93f54ff159cb52dcbec65edc79067166b57b8e2a4600adbffd02785ee1bf6132
|
Provenance
The following attestation bundles were made for pylogrouter-0.1.5.tar.gz:
Publisher:
ci.yml on mykolarudenko/pylogrouter
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pylogrouter-0.1.5.tar.gz -
Subject digest:
0b9b11dbdc346fd29b807f151427361f3c08ce2826bf1741f63d82f99660f121 - Sigstore transparency entry: 974040278
- Sigstore integration time:
-
Permalink:
mykolarudenko/pylogrouter@7a07cf3762fa11aee9d6a778f79754742f5494a2 -
Branch / Tag:
refs/tags/v0.1.5 - Owner: https://github.com/mykolarudenko
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@7a07cf3762fa11aee9d6a778f79754742f5494a2 -
Trigger Event:
push
-
Statement type:
File details
Details for the file pylogrouter-0.1.5-py3-none-any.whl.
File metadata
- Download URL: pylogrouter-0.1.5-py3-none-any.whl
- Upload date:
- Size: 18.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
03e7417ac8696613454db9b5bb1c71885dcfe43b7289e80d9718ddfda4da24b8
|
|
| MD5 |
91a4d6fd28efa307ba17872859feca64
|
|
| BLAKE2b-256 |
10e15e353f47a6fd9ba26c82c8146f4e46dcdecf413c7bdd08f0e58529388e50
|
Provenance
The following attestation bundles were made for pylogrouter-0.1.5-py3-none-any.whl:
Publisher:
ci.yml on mykolarudenko/pylogrouter
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pylogrouter-0.1.5-py3-none-any.whl -
Subject digest:
03e7417ac8696613454db9b5bb1c71885dcfe43b7289e80d9718ddfda4da24b8 - Sigstore transparency entry: 974040373
- Sigstore integration time:
-
Permalink:
mykolarudenko/pylogrouter@7a07cf3762fa11aee9d6a778f79754742f5494a2 -
Branch / Tag:
refs/tags/v0.1.5 - Owner: https://github.com/mykolarudenko
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@7a07cf3762fa11aee9d6a778f79754742f5494a2 -
Trigger Event:
push
-
Statement type: