Czy istnieje sposób, aby logowanie w Pythonie za pomocą logging
modułu automatycznie wyświetlało rzeczy na standardowe wyjście oprócz pliku dziennika, do którego powinny się udać? Na przykład, chciałbym wszystkich połączeń do logger.warning
, logger.critical
, logger.error
aby przejść do zamierzonych miejscach, ale w dodatku zawsze być kopiowane do stdout
. Ma to na celu uniknięcie powielania wiadomości, takich jak:
mylogger.critical("something failed")
print "something failed"
Odpowiedzi:
Wszystkie dane wyjściowe rejestrowania są obsługiwane przez procedury obsługi; po prostu dodaj a
logging.StreamHandler()
do głównego loggera.Oto przykład konfigurowania modułu obsługi strumienia (użycie
stdout
zamiast domyślnegostderr
) i dodawanie go do głównego programu rejestrującego:źródło
stdout
?logging.Formatter
.Najprostszy sposób na zalogowanie się na standardowe wyjście:
źródło
stream=sys.stdout
nadal działa w przypadku logowania do konsoli.Jest to możliwe przy użyciu wielu programów obsługi.
Zobacz: https://docs.python.org/2/howto/logging-cookbook.html
źródło
sys.stdout
parametru wch = logging.StreamHandler()
Możesz utworzyć dwie procedury obsługi plików i standardowego wyjścia, a następnie utworzyć jeden program rejestrujący z
handlers
argumentem dobasicConfig
. Może to być przydatne, jeśli masz ten sam poziom log_level i format wyjściowy dla obu programów obsługi:źródło
Najprostszy sposób na zalogowanie się do pliku i do stderr:
źródło
Oto rozwiązanie oparte na potężnej, ale słabo udokumentowanej
logging.config.dictConfig
metodzie . Zamiast wysyłać każdy komunikat dziennika dostdout
, wysyła wiadomości o poziomie dziennika wyższymERROR
i dostderr
wszystkich innych elementówstdout
. Może to być przydatne, jeśli inne części systemu słuchająstderr
lubstdout
.źródło
Ponieważ nikt nie udostępnił zgrabnego linera, podzielę się własnym:
źródło
Oto niezwykle prosty przykład:
Dane wyjściowe pokażą „test msg” na standardowym wyjściu, a także w pliku.
źródło