Lösen wir das Problem, während wir unsere Hände bewegen und organisieren.
import logging
logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%m/%d/%Y', filename = './basic.log')
logging.warning('basic.Aufgezeichnet im Protokoll mit Datum.')
logging.basicConfig(filename = './not-appeared.log')
logging.warning('basicConfig funktioniert nur beim ersten Mal nach dem Booten, also nicht-appeared.Es wird kein Protokoll erstellt.')
root_logger = logging.getLogger('')
root_logger.setLevel(logging.ERROR)
root_logger.error('Ein Root-Logger wurde eingerichtet, um ERROR-Levels und höher aufzuzeichnen. Basic.Es wird weiterhin im Protokoll angezeigt. Ich habe keinen Handler angegeben, daher kann ich nichts anderes finden.')
root_logger.addHandler(logging.StreamHandler())
root_logger.error('Dies wird auf der Konsole angezeigt. Das in basicConfig angegebene Format wird ignoriert.')
root_logger.warning('Da die Protokollstufe niedrig ist, wird sie nicht auf der Konsole angezeigt. Wenn ignoriert, einfach.Es wird nicht im Protokoll angezeigt.')
critical_handler = logging.FileHandler('./critical.log')
critical_handler.setLevel(logging.CRITICAL)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
critical_handler.setFormatter(formatter)
root_logger.addHandler(critical_handler)
root_logger.critical('Es wurde ein Handler hinzugefügt, der nur KRITISCH aufzeichnet. Datums- und Ebenenname hinzugefügt.')
root_logger.error('Obwohl dies auf der Konsole angezeigt wird, ist es wichtig, da die Protokollstufe niedrig ist.Es wird nicht im Protokoll angezeigt.')
second_logger = logging.getLogger('second')
second_logger.setLevel(logging.WARNING)
second_logger.addHandler(logging.StreamHandler())
second_logger.warning('Fügen Sie einen Logger hinzu und legen Sie ihn auf die Konsole. Basic.Zusätzlich zum Protokoll wird es zweimal auf der Konsole mit dem Root-Logger angezeigt.')
second_logger.propagate = False
second_logger.warning('Wenn Sie die Weitergabe ablehnen, wird sie nicht stromaufwärts übertragen. Dies ist die zweite_Es ist nur ein Logger verfügbar.')
・ Es kann basierend auf dem Root-Logger in mehreren Stufen vererbt werden.
Wenn Sie einen Filter verwenden, können Sie filtern, indem Sie einen Protokolldatensatz (eine Instanz einer Protokollnachricht) als Argument aufrufen und bei jeder Protokollierung einen booleschen Wert zurückgeben.
Ich habe auf diesen Beitrag zum Stapelüberlauf verwiesen. Wie Nr. 1 sagt, stimme ich zu, dass das Extrahieren nur eines bestimmten Levels es für Menschen nicht lesbar macht.
python logging specific level only
log_file_by_level.py
import logging
class LoggingFilter(object):
"""Filter, der nur eine bestimmte Protokollebene belässt"""
def __init__(self, level):
self.__level = level
def filter(self, logRecord):
#Entfernen Sie die Pegeleinstellung zum Handler und hier== self.__Es sollte möglich sein, es auf Level zu setzen.
return logRecord.levelno <= self.__level
def set_handler(loglevel, filename):
#Allgemeines Protokollformat
log_format = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
handler = logging.FileHandler(filename)
handler.setLevel(loglevel)
handler.setFormatter(log_format)
handler.addFilter(LoggingFilter(loglevel))
logger.addHandler(handler)
logger = logging.getLogger(__name__)
#Geben Sie den Mindestpegel an, der in der App aufgezeichnet werden soll.
logger.setLevel(logging.DEBUG)
set_handler(logging.WARN, './warning.log')
set_handler(logging.INFO, './info.log')
main.py
from log_file_by_level import logger
logger.warning('I warn you.')
logger.info('Please be informed that this is just a test.')
logger.error('Found error on your smile.')
・ Nur Python-Protokollierungsstufe ・ Protokollierungs-HOWTO - Python 3.6.1-Dokument
Recommended Posts