webentwicklung-frage-antwort-db.com.de

Python: Wie erstellt man täglich eine Logdatei mit dem Logging-Modul?

Ich bin neu im Logging-Modul von Python. Ich möchte täglich eine neue Protokolldatei erstellen, während meine Anwendung ausgeführt wird.

log file name - my_app_20170622.log
log file entries within time - 00:00:01 to 23:59:59

Am nächsten Tag möchte ich eine neue Protokolldatei mit Datum des nächsten Tages erstellen -

log file name - my_app_20170623.log
log file entries within time - 00:00:01 to 23:59:59

Ich benutze das Logging-Modul von Python. 

Ich benutze wie unten - 

log_level = int(log_level)
logger = logging.getLogger('simple')
logger.setLevel(log_level)
fh = logging.FileHandler(log_file_name)
fh.setLevel(log_level)
formatter = logging.Formatter(log_format)
fh.setFormatter(formatter)
logger.addHandler(fh)

Sind ihre Konfigurationen im Logging-Modul von Python, um täglich ein Protokoll zu erstellen?

6
kit

Sie müssen eine TimedRotatingFileHandler anlegen:

from logging.handlers import TimedRotatingFileHandler
logname = "my_app.log"
handler = TimedRotatingFileHandler(logname, when="midnight", interval=1)
handler.suffix = "%Y%m%d"
logger.addHandler(handler)

Dieser Code erstellt einen my_app.log, das Protokoll wird jedoch in eine neue Protokolldatei mit dem Namen my_app.log.20170623 verschoben, wenn der aktuelle Tag um Mitternacht endet.

Ich hoffe das hilft.

10
Adrian Antunez

Zum Schluss habe ich die richtige Antwort erhalten und möchte diese Antwort teilen.

Grundsätzlich muss ein TimedRotatingFileHandler erstellt werden wie unten -

log_format = "%(asctime)s - %(levelname)s - %(message)s"
log_level = 10
handler = TimedRotatingFileHandler("my_app.log", when="midnight", interval=1)
handler.setLevel(log_level)
formatter = logging.Formatter(log_format)
handler.setFormatter(formatter)

# add a suffix which you want
handler.suffix = "%Y%m%d"

#need to change the extMatch variable to match the suffix for it
handler.extMatch = re.compile(r"^\d{8}$") 

# finally add handler to logger    
logger.addHandler(handler)

Dieser Code generiert eine Datei wie my_app.log für den aktuellen Tag und my_app.log.20170704 für den Vortag.

Ich hoffe es hilft.

2
kit

Ich schlage vor, Sie werfen einen Blick auf logging.handlers.TimedRotatingFileHandler. Ich denke, es ist was Sie suchen.

0
Marc Z