Logging utilities for SciTeX — SUCCESS/FAIL log levels, typed exception hierarchy, Tee context-manager.
Full Documentation · uv pip install scitex-logging[all]
| # | Problem | Solution |
|---|---|---|
| 1 | stdlib logging has only 5 levels -- experiment scripts want a distinct SUCCESS and FAIL signal that stands out in grep |
SUCCESS + FAIL levels added -- color-coded, level-aware handlers; drop-in compatible with getLogger(__name__) |
| 2 | raise ValueError("shape mismatch") loses context -- every package rolls its own exception hierarchy |
30+ typed exceptions -- SciTeXError root + ShapeError, DTypeError, ConfigKeyError, PDFDownloadError, ...; isinstance(e, DataError) catches the whole class |
| 3 | Tee stdout-to-file is a recipe -- every script implements it differently | Tee("run.log") context-manager -- one import, no boilerplate |
pip install scitex-loggingPython API
import scitex_logging
# Configure logging
scitex_logging.configure(level=scitex_logging.INFO, enable_file=True)
# Get a logger
import logging
logger = logging.getLogger(__name__)
logger.info("Hello from SciTeX logging")
# Tee stdout/stderr to log files
import sys
sys.stdout, sys.stderr = scitex_logging.tee(sys)
# Custom error classes
from scitex_logging import SciTeXError, SaveError
# Warning utilities
from scitex_logging import warn_deprecated, warn_performance
# LLM session log parsing
log = scitex_logging.llm.load("session.jsonl")
log.summary()
log.render("out.html")scitex_logging/
├── _config.py ← `configure()` entry point + level registration
├── _levels.py ← SUCCESS / FAIL custom log levels
├── _Tee.py ← stdout/stderr Tee context-manager
├── _errors.py ← 30+ typed `SciTeXError` subclasses
├── _warnings.py ← `warn_deprecated`, `warn_performance`
└── llm/ ← Claude / LLM session-log parsers
flowchart LR
A[script.py] -->|getLogger| B[scitex_logging]
B --> C{level}
C -->|SUCCESS| D[green log + Tee → run.log]
C -->|FAIL| E[red log + Tee → run.log]
C -->|ERROR| F[typed SciTeXError raised]
import logging, scitex_logging as sxl
sxl.configure(level=sxl.INFO, enable_file=True)
log = logging.getLogger(__name__)
log.success("model converged") # green
log.fail("validation failed") # red, distinct from ERROR2026-05-07 12:00:00 SUCCESS model converged
2026-05-07 12:00:01 FAIL validation failed
scitex-logging is part of SciTeX. Install via
the umbrella with pip install scitex[logging] to use as
scitex.logging (Python).
Four Freedoms for Research
- The freedom to run your research anywhere — your machine, your terms.
- The freedom to study how every step works — from raw data to final manuscript.
- The freedom to redistribute your workflows, not just your papers.
- The freedom to modify any module and share improvements with the community.
AGPL-3.0 — because we believe research infrastructure deserves the same freedoms as the software it runs on.
AGPL-3.0-only — see LICENSE.