5545f05eee
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
57 lines
2.4 KiB
Markdown
57 lines
2.4 KiB
Markdown
# central_logging — drop-in klient pro centrální logování
|
|
|
|
**Verze:** 1.0 · **Datum:** 2026-06-08
|
|
**Soubory:** `central_logging.py` (import shim) + `central_logging_v1.0.py` (impl)
|
|
|
|
Knihovna, která ke stávajícímu souborovému logování přidá odesílání logů do
|
|
Loki přes bránu `log_gateway`. Jen standardní knihovna — žádné `pip install`.
|
|
|
|
## Rychlý start
|
|
|
|
```python
|
|
from central_logging import setup_logging
|
|
log = setup_logging("nazev_skriptu")
|
|
log.info("start")
|
|
log.error("chyba: %s", err)
|
|
```
|
|
|
|
## `setup_logging(...)` — parametry
|
|
|
|
| Argument | Default | Popis |
|
|
|-------------|------------------------|---------------------------------------------|
|
|
| `app_name` | (povinný) | label aplikace v Loki |
|
|
| `log_file` | `<app_name>.log` | cesta souborového logu |
|
|
| `keep_file` | ENV / `True` | psát i do souboru? po měsíci → `False` |
|
|
| `level` | ENV / `INFO` | min. úroveň |
|
|
| `gateway` | ENV / `192.168.1.76:8770` | URL brány |
|
|
| `token` | ENV | sdílené tajemství |
|
|
| `env` | ENV / `prod` | label prostředí |
|
|
|
|
## Jak to funguje
|
|
|
|
1. `emit()` jen vloží záznam do fronty (neblokuje skript).
|
|
2. Vlákno na pozadí každé ~2 s pošle dávku (max 200 záznamů) na
|
|
`POST /log/batch`.
|
|
3. **Výpadek brány** → dávka se zapíše do `_log_spool/central_logging_spool_<app>.ndjson`
|
|
a přehraje se při příštím úspěšném spojení. Žádný log se neztratí.
|
|
4. `atexit` při ukončení skriptu dolije zbytek fronty.
|
|
|
|
Handler je psaný tak, aby **nikdy neshodil aplikaci** — všechny chyby logování
|
|
se polykají.
|
|
|
|
## Import a konvence verzí
|
|
|
|
Konvence projektu = verze ve jméně (`central_logging_v1.0.py`). Python ale neumí
|
|
import názvu s tečkou, proto je tu shim `central_logging.py`, který verzovaný
|
|
soubor načte přes `importlib` a re-exportuje `setup_logging`. Při vydání v1.1
|
|
stačí v shimu přepnout `VERSION_FILE` a starou verzi přesunout do `TRASH/`.
|
|
|
|
## Vypnutí souborů (fáze C migrace)
|
|
|
|
Globálně:
|
|
```bash
|
|
set CENTRAL_LOG_KEEP_FILE=0 # Windows
|
|
export CENTRAL_LOG_KEEP_FILE=0 # Linux
|
|
```
|
|
nebo v kódu `setup_logging(..., keep_file=False)`.
|