Skip to main content

Automatic function logging with decorators — output to SQLite, CSV, and Markdown

Project description

lg

Tak, istnieją biblioteki Pythona, które automatyzują generowanie logów w funkcjach na podstawie analizy kodu, typów danych czy struktur jak try-except.

Loguru

Loguru to popularna biblioteka oferująca dekoratory do automatycznego logowania wejścia/wyjścia funkcji oraz wyjątków.
Używa się jej prosto: @loguru.logger.catch na funkcji automatycznie przechwytuje błędy i loguje szczegóły, w tym argumenty i typy.
Przykład: dekorator loguje parametry wejściowe, wyjątki z traceback oraz czas wykonania bez pisania ręcznych logów. pktiuk.github

Decorator logowania

Biblioteka funcy lub proste dekoratory z functools pozwalają tworzyć customowe wrappery analizujące inspect.signature() dla typów argumentów.
Można dynamicznie logować nazwy parametrów, ich typy (type(arg)) i wartości przy wejściu/wyjściu.
Dla zaawansowanych przypadków pydantic integruje walidację typów z automatycznymi logami błędów walidacji w blokach try-except. bulldogjob

Funkcjonalne podejście

Własny dekorator z inspect i logging może skanować strukturę kodu (ast.parse) i generować logi debug na podstawie obecności try-catch czy typów.
Biblioteki jak wrapt ułatwiają takie wrappingi bez modyfikacji oryginalnych funkcji.
To idealne dla Twoich projektów z embedded systems i automatyzacją, gdzie chcesz minimalizować boilerplate. pktiuk.github

Tak, Loguru i standardowy logging z custom handlerami umożliwiają eksport logów bezpośrednio do SQLite, CSV czy Markdown poprzez konfigurację sinków lub handlerów. Poniżej przykłady użycia z automatycznym logowaniem (dekoratory) i outputem do plików.

Przykład Loguru z dekoratorem i CSV

Loguru pozwala dodać sink do pliku CSV, logując automatycznie argumenty, wyjątki z try-catch i typy danych.

from loguru import logger

# Dodaj sink CSV (automatycznie strukturyzuje logi)
logger.add("logs.csv", format="{time} | {level} | {name}:{function}:{line} | {message}", serialize=True)

@logger.catch  # Automatycznie loguje wejście/wyjście i wyjątki
def moja_funkcja(x: int, y: str):
    return x / len(y)  # Przykładowy błąd

moja_funkcja(10, "")  # Loguje do CSV z typami i traceback [web:23][web:13]

Wynik w CSV: kolumny jak time, level, message z JSON-serializowanymi danymi (argumenty, typy). github

Loguru do Markdown

Loguru sink do Markdown generuje czytelne logi z nagłówkami i formatowaniem.

logger.add("logs.md", format="## {time:YYYY-MM-DD HH:mm:ss} | {level}\n{ message }\n", colorize=False)

@logger.catch
def test_funkcja(data):
    raise ValueError("Błąd typów")

test_funkcja({"key": "value"})  # Logi z markdown: ## nagłówki, kody bloków [web:21]

Plik MD: struktura z datą, poziomem, pełnym traceback i zmiennymi. jojoduquartier.github

SQLite Handler dla logging/Loguru

Użyj python-sqlite-log-handler lub custom handler do bazy danych; integruje z dekoratorami.

import logging
from python_sqlite_log_handler import SQLiteLogHandler  # pip install python-sqlite-log-handler

logger = logging.getLogger("app")
handler = SQLiteLogHandler(db_path="logs.db")  # Tworzy tabelę logs
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)

def try_catch_logger(func):
    def wrapper(*args, **kwargs):
        try:
            return func(*args, **kwargs)
        except Exception as e:
            logger.error(f"Błąd w {func.__name__}: {e}", exc_info=True)
            raise
    return wrapper

@try_catch_logger
def funkcja_z_db(arg: dict):
    if not arg: raise KeyError("Brak danych")

funkcja_z_db({})  # Loguje do SQLite: created_at, level, message, extra z typami [web:15][web:12]

Query SQL: SELECT * FROM logs WHERE level >= 30 – łatwe filtrowanie. pypi

Porównanie outputów

Biblioteka/Handler SQLite CSV Markdown Automatyczne dekoratory
Loguru Tak (custom sink) stackoverflow Tak (serialize=True) github Tak (format MD) jojoduquartier.github @logger.catch datacamp
logging + sqlite-handler Tak (natywnie) pypi Tak (CSVHandler) Custom formatter Custom @try_catch jojoduquartier.github

Analiza rozwiązań do automatycznego logowania w Pythonie

Istnieją cztery główne biblioteki umożliwiające automatyczne logi w funkcjach na bazie typów danych, struktur kodu (try-catch) i dekoratorów. Loguru jest najpopularniejszy (15k+ gwiazdek GitHub), structlog skupia się na strukturyzowanych logach, Eliot na wizualizacji, a standardowy logging z rozszerzeniami na elastyczność. betterstack

Szczegółowa tabela porównawcza

Biblioteka Automatyczne logi (dekoratory) Analiza typów/struktury kodu Obsługa SQLite Obsługa CSV Obsługa Markdown Zalety Wady GitHub Stars (2026) Ostatnia aktualizacja
Loguru betterstack Tak (@logger.catch: wejście/wyjście, wyjątki, traceback) Częściowa (loguje args via inspect, typy w serializacji) Tak (custom sink z sqlite3) stackoverflow Tak (serialize=True, CSV format) github Tak (custom format z ## nagłówkami) jojoduquartier.github Zero-config, rotation plików, structured JSON, kolorowanie Nie threaded-safe domyślnie 15k+ betterstack Aktywna (2024-12) pypi
structlog matthewstrawbridge Tak (bind_context, processors dla func args) Tak (structured metadata z typami, AST via processors) Tak (via JSON + sqlite insert) stackoverflow Tak (JSON/CSV processors) Tak (custom renderer) Structured logs, async, OpenTelemetry Więcej configu niż Loguru Wysokie (top 6) betterstack Aktywna dash0
Eliot betterstack Tak (@log_call: pełne wejście/wyjście funkcji) Tak (strukturyzowane eventy z typami) Tak (JSON do SQLite) Tak (JSON export) Częściowa (JSON -> MD via tree) Wizualizacja (eliot-tree CLI), narracyjne logi Brak poziomów logów Średnie betterstack Stabilna
logging std + handlers reddit Tak (custom @decorator z inspect/traceback) jojoduquartier.github Tak (via inspect.signature, ast.parse) Tak (python-sqlite-log-handler) pypi Tak (CSVHandler/FileHandler) Tak (custom Formatter) Natywny, config files, threaded Boilerplate bez dekoratorów Wbudowany Python 3.14 docs.python

Rekomendacje dla Twoich projektów

Dla embedded/automatyzacji (RPi/ESP32) wybierz Loguru – prosty, lekki, integruje z Docker/K8s. Do biznesu (ERP/legal) structlog dla searchable JSON/SQLite. Przykłady kodu z poprzednich odpowiedzi działają out-of-box po pip install loguru python-sqlite-log-handler. reddit

W dobie LLM i multisrodowiskowych aplikacji (embedded, Docker/K8s, CI/CD) brakuje kilku kluczowych funkcji w bibliotekach logujących jak Loguru/structlog.

Braki w automatycznym logowaniu

Brak natywnej integracji z LLM do kontekstowego parsowania logów
Żadna biblioteka nie analizuje logów przez LLM w locie (np. "ten wyjątek TypeError sugeruje brak walidacji int w argumencie x") ani nie generuje sugestii fixów bezpośrednio w logu. W CI/CD z LLM to kluczowe dla szybkiej iteracji. ijamjournal

Tabela brakujących funkcji

Brakująca funkcja Opis problemu Przykład zastosowania w Twoich projektach
LLM-powered log parsing Logi tylko statyczne; brak AI do grupowania podobnych błędów czy predykcji root cause W embedded RPi: LLM grupuje "I2C timeout" z sensorami i sugeruje "sprawdź zasilanie"
Multi-env log correlation Brak automatycznego tagowania środowisk (dev/staging/prod) + trace ID dla K8s pods CI/CD deploy do Docker: brak linku "błąd w pod-3 → Git commit abc123"
Dynamic sink routing Ręczne config sinków (SQLite/CSV); brak auto-przełączania na bazie env/variable types Prod → Elasticsearch, dev → Markdown; bez config files
Structured diff logs Nie loguje zmian input/output między wersjami funkcji w CI/CD A/B test funkcji: "v1.2.1 input dict → output None, v1.2.2 → output list"
Prompt injection detection Brak auto-detektu LLM prompt injection w logach API calls Twoja automatyzacja prawna: loguje "znajdź lukę w umowie X" → flaga bezpieczeństwa

Proponowane rozszerzenia dla CI/CD + LLM

# Wyobrażone Loguru 3.0 z LLM integration
from loguru_llm import LLMAnalyzer

@logger.catch(llm_analyzer=LLMAnalyzer(model="gpt-4o-mini"))
def risky_function(user_input: str):
    # LLM auto-parsuje exception i dodaje: "Prawdopodobna przyczyna: SQL injection"
    return eval(user_input)  # danger!

Dla Twoich projektów: Stwórz custom sink z LangChain + Pinecone vector DB do semantycznego searchu logów ("pokaż wszystkie TypeError z dict arg w ciągu 7 dni") i GitHub Actions step z LLM code review na bazie logów z failed builds. github

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

nfo-0.1.9.tar.gz (20.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nfo-0.1.9-py3-none-any.whl (15.3 kB view details)

Uploaded Python 3

File details

Details for the file nfo-0.1.9.tar.gz.

File metadata

  • Download URL: nfo-0.1.9.tar.gz
  • Upload date:
  • Size: 20.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for nfo-0.1.9.tar.gz
Algorithm Hash digest
SHA256 dc335fbbc77445d1ea0e42f2ba18648f9eb31ab9baec2d8ceac39b4693ac40d7
MD5 85944f0fcf37b500e3f46f87e7560b8f
BLAKE2b-256 e15ae8ea34ef5bed49bcf6c00e3c7ecc78d311a0f4b7bc3de6ab631a1be483ed

See more details on using hashes here.

File details

Details for the file nfo-0.1.9-py3-none-any.whl.

File metadata

  • Download URL: nfo-0.1.9-py3-none-any.whl
  • Upload date:
  • Size: 15.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for nfo-0.1.9-py3-none-any.whl
Algorithm Hash digest
SHA256 d8cc223da12c8dde9373986a2b2b420fa85ba746a6d5d09a478544401f4732c4
MD5 8d5178f2478ac5e2495c693245028d12
BLAKE2b-256 3f7a98c7be0184221e3c72bd6f0359a289113c6e462f6dc1fd4cbea29f49e4d4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page