Powinieneś zajrzeć do Python Logging HOWTO, aby zrozumieć, jak to działa.
Krótko mówiąc, wszystkie te moduły zwykle robią to rejestrator formularza G_LOG = logging.getLogger('package.name')
i wysyłanie wiadomości do rejestratora: G_LOG.info('some message'), G_LOG.exception('something bad happened')
. Moduły zwykle nie powinny konfigurować niczego.
Aplikacja, która wykorzystuje moduły można włączyć rejestrowanie i konfigurowanie koparki na podstawie nazw Rejestrator:
- słuchają wszystkie wiadomości, lub
- tylko słuchać wiadomości powyżej pewnego progu, lub
- słuchać wiadomości tylko z rejestratorów, których nazwa zaczyna się
package
lub
- słuchać wiadomości tylko z rejestratorów, których nazwa zaczyna stac
package.name
itp
Najprostszym sposobem jest skonfigurować rejestrowanie poprzez logging.basicConfig gdzieś na początku swojej aplikacji:
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(levelname)-8s %(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
filename=log_file, filemode='a')
ten sposób można napisać wszystkie wiadomości z logowaniem ze wszystkich modułów do log_file
.
Aby uzyskać bardziej szczegółową strategię rejestrowania (umieścić dzienniki z różnych rejestratorów w różnych plikach lub wysłać stosy do oddzielnego pliku), lepiej jest zdefiniować plik konfiguracyjny rejestrowania i skonfigurować rejestrowanie przy użyciu logging.config.dictConfig lub logging.config.fileConfig
.
P.S. I zazwyczaj utworzyć dwa rejestratory jako zmienne Moduł:
G_LOG = logging.getLogger(__name__)
ST_LOG = logging.getLogger('stacktrace.' + __name__)
do G_LOG
ja wysyłał wiadomości tylko jedna linia. Do ST_LOG
Powielam ważne wiadomości, używając ST_LOG.exception
, która domyślnie ma exc_info=True
i zapisuje stos bieżącego wyjątku.
Na początku stosowania załadować konfigurację, która konfiguruje dwa rejestratory (i dwie koparki plików dla nich): jeden, który odbiera wiadomości, które zaczynają się stacktrace
i ma propagate=0
(czyli StackTrace wiadomości nie są widoczne u góry) i dziennik główny, który obsługuje pozostałe wiadomości. Nie będę tutaj umieszczał moich pełnych plików konfiguracyjnych dziennika, ponieważ jest to przydatna praca domowa, aby zrozumieć, jak to wszystko działa.
Uwielbiam pomysł stacktrace, który tu masz, ale nienawidzę twojej pozycji "Nie umieszczę tutaj moich pełnych logicznych plików konfiguracyjnych". Piszę od 10 lat i nadal loguję się bardzo słabo z powodu tego, jak straszna jest dokumentacja. Kilka razy w roku inwestuję całe dni pracy, próbując znaleźć coś lepszego. Zwykle rezygnuję i zgadzam się na coś, co zrobiłem w przeszłości. –
@BrunoBronosky, prawdopodobnie masz rację. To dobry pomysł. – newtover