Ich habe einen Logger eingerichtet mit zwei Handlern - einen zur Konsole und einen eine rotierte Datei. Ich setze jeden einzelnen Handler mit seinem eigenen Loglevel. Die Idee ist, dass wichtige Nachrichten auf der Konsole verfügbar sind, während die unteren Ebenen der Datei in die Datei gehen, falls ich eine weitere Fehlersuche durchführen muss.Kann ich die Protokollstufe eines einzelnen Handlers in Python dynamisch ändern?
Meine Konfigurationsdatei sieht wie folgt aus:
[loggers]
keys=root
[handlers]
keys=consoleHandler,rotateFileHandler
[formatters]
keys=simpleFormatter
[logger_root]
level=DEBUG
handlers=consoleHandler,rotateFileHandler
qualname=MyApplication
propagate=0
[handler_consoleHandler]
class=StreamHandler
level=ERROR
formatter=simpleFormatter
args=(sys.stdout,)
[handler_rotateFileHandler]
class=handlers.RotatingFileHandler
level=INFO
formatter=simpleFormatter
args=('TESTLOG.log', 'a', 100000, 5, 'utf8')
[formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=
Gibt es eine Möglichkeit (und dann zurücksetzen), um dynamisch zu ändern, um die Protokollebene für einen einzelnen Handler? Ich habe versucht, dies zu tun, aber es schlägt fehl, weil logger
ist, nun, der Logger und nicht der Handler. Es ist auch bereits auf DEBUG
gesetzt, es sind die Handler, die auf höheren Ebenen eingestellt sind.
import logging
import logging.config
logging.config.fileConfig('logging.config', disable_existing_loggers=False)
logger = logging.getLogger('TestLog')
def main():
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')
# Reset log level to debug temporarily
logger.setLevel(logging.DEBUG)
logger.debug('This message appears if level was reset to DEBUG')
if __name__ == '__main__':
main()
Mein Ziel ist es, die Konsole auf ein niedrigeres Niveau in der Lage sein zu setzen (dh. logging.DEBUG
für einen bestimmten Zeitraum und dann wieder ändern, indem Sie entweder das vorherige Niveau sichern, bevor die Änderung ausgeführt wird oder explizit Zurücksetzen es). Ich möchte die anderen Handler nicht berühren, wenn ich das tue.
Wie ändere ich die Handler Log-Level dynamisch?
Für den Abschnitt "logger_root" wird das Feld "qualname" vollständig ignoriert. Es hat keinen Sinn, sie festzulegen. –