Files
janssen/CentralLogging/client/central_logging_v1.0.md
T

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)`.