wake-up-neo.net

Python-Protokollierung in stdout und Protokolldatei

Ich bin relativ neu in Python und fange an, in das Logging-Modul zu kommen. Ich möchte, dass die Nachricht in einer Protokolldatei protokolliert und an die Konsole ausgegeben wird. Mit dem folgenden Code wird die Nachricht an die Konsole ausgegeben. Wie kann ich jedoch die gesamte Nachricht in einer Datei protokollieren lassen?

Das Logger-Objekt hat keinen Funktionsaufruf (basicConfig (Dateiname =)) zum Protokollieren in eine Datei. Wie kann ich diese Funktionalität hinzufügen?

Vielen Dank für die Hilfe im Voraus.

import logging

# create logger
logger = logging.getLogger(_name_)
logger.setLevel(logging.DEBUG)

# create console handler and set level to debug
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)

# create formatter
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# add formatter to ch
ch.setFormatter(formatter)

# add ch to logger
logger.addHandler(ch)

# 'application' code
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')
17
Zen

Sie müssen nur einen weiteren Handler hinzufügen, wie einen logging.FileHandler.

fh = logging.FileHandler(r'/path/to/log.txt')
logger.addHandler(fh)
16
Brendan Abel

@ Brendans Antwort wird erweitert.

Ihr Logger wird derzeit mit einer StreamHandler an die Konsole ausgegeben.

Durch Hinzufügen einer FileHandler können Sie sich in eine Datei einloggen.

Jede Handler-Instanz kann an ihr eigenes Format und Protokollierungsniveau angepasst werden.

Wenn Sie mit demselben Format protokollieren möchten, müssen Sie das Format auch für den neuen FileHandler festlegen.

fh = logging.FileHandler(r'/path/to/log.txt')
fh.setFormatter(formatter)
logger.addHandler(fh)

Lesen Sie mehr: Python Logging-Kochbuch

7
victor

Nachdem ich den Waterboy-Code für die gleichzeitige Protokollierung zur Konsultation und zum Ablegen (siehe diesen Thread ) immer wieder in mehreren Python-Paketen verwendet hatte, habe ich ihn schließlich in ein kleines, eigenständiges Python-Paket umgewandelt, das Sie hier finden können:

https://github.com/acschaefer/duallog

Der Code ist gut dokumentiert und einfach zu verwenden. Laden Sie einfach die .py-Datei herunter und fügen Sie sie in Ihr Projekt ein oder installieren Sie das gesamte Paket über python setup.py install

Bei Verwendung dieses Pakets würde Ihr Code folgendermaßen aussehen:

# Set up logging to console and file.
import duallog
duallog.setup(logdir='my_logs')

# Generate log messages.
import logging    
logging.debug('debug message')
logging.info('info message')
logging.warn('warn message')
logging.error('error message')
logging.critical('critical message')
0
Lexxer