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.11.tar.gz (20.6 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.11-py3-none-any.whl (15.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: nfo-0.1.11.tar.gz
  • Upload date:
  • Size: 20.6 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.11.tar.gz
Algorithm Hash digest
SHA256 7213907ec0b7e9f1d30f7d03a46e727912fe4da32a328d6d9d483ee165f0103d
MD5 4a7de5cb6dc435ddba1c5ff5d14f16e8
BLAKE2b-256 9857725f7bb4cc43aaae3dc23a6cde28f56b81a0b0bbd86feb2d095659e04013

See more details on using hashes here.

File details

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

File metadata

  • Download URL: nfo-0.1.11-py3-none-any.whl
  • Upload date:
  • Size: 15.4 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.11-py3-none-any.whl
Algorithm Hash digest
SHA256 85b6d5b5136d89b06000b2e07c7d6f74dd0bd9cc8be18591a14007eb1b37bc6e
MD5 906a71adb74c1a1a77e4fd1d30cc8925
BLAKE2b-256 0c969ccf273dc8ad21566c86c9665f8f2bd8efb2434367cfb5b9a547cb24738b

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