Kiedy loguję zdarzenie za pomocą logging.info
, nie pojawia się ono w terminalu Pythona.
import logging
logging.info('I am info') # no output
Natomiast zdarzenia zarejestrowane za pomocą logging.warn
nie pojawiają się w terminalu.
import logging
logging.warn('I am warning') # outputs "I am warning"
Czy istnieje zmiana poziomu środowiska, którą mogę logging.info
wydrukować na konsoli? Chcę uniknąć wprowadzania zmian w każdym pliku Pythona.
getLogger()
, zwraca główny program rejestrujący. Dopóki nie zmodyfikujesz innych programów rejestrujących, wystarczy zmodyfikować główny program rejestrujący.Python 3.5.2 (default, Nov 12 2018, 13:43:14)
[GCC 5.4.0 20160609] on linux
>>> import logging
>>> rootLog = logging.getLogger()
>>> rootLog.setLevel(logging.INFO)
>>> rootLog.info('all the kings horses')
>>> rootLog.warning('all the kings men')
all the kings men
Tak jak @ztyx powiedział, że domyślny poziom rejestratora to OSTRZEŻENIE. Musisz ustawić go na niższy poziom
Możesz to zrobić, korzystając z logging.basicConfig i ustawiając poziom rejestratora :
źródło
basicConfig()
u mnie nie działa, chociażlogging.getLogger().setLevel()
odpowiednio działa?Powyższe rozwiązania nie działały u mnie, ale kod tutaj :
# set up logging to file logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s', datefmt='%m-%d %H:%M', filename='/temp/myapp.log', filemode='w') # define a Handler which writes INFO messages or higher to the sys.stderr console = logging.StreamHandler() console.setLevel(logging.INFO) # add the handler to the root logger logging.getLogger('').addHandler(console)
(Pominąłem części kodu ze względu na czytelność)
źródło
logging.error("Connection timed out!")
a nawet zlevel=logging.DEBUG
in thebasicConfig()
, nie byłby on drukowany na konsoli. Dodanie handlera tak, wielkie dzięki !!basicConfig
lub ustawię go powyżej INFO, to rejestrator konsoli nigdy niczego nie zarejestruje. Jeśli opuszczę,basicConfig
mogę dzwonićsetLevel
do rejestratora przez cały dzień (i widzę zmianę poziomu, dzwoniącgetEffectiveLevel
), ale nigdy nie zarejestruje niczego poniżejWARNING
poziomu. Właściwie nie jestem pewien, czy to nie jest właściwe zachowanie, ale nie tego się spodziewałem.