Ich habe ein paar Beiträge dazu gelesen, bin aber immer noch verwirrt. Ich habe dieses Protokollierungssetup:
import logging
class MongoHandler(logging.Handler):
def __init__(self):
logging.Handler.__init__(self)
from pymongo import Connection
self.db = Connection('db_server').db_name
def emit(self, record):
try:
self.db.Logging.save(record.__dict__)
except:
print 'Logging Error: Unable to save log entry to db'
mh = MongoHandler()
sh = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s - %(threadName)s - %(levelname)s - %(message)s')
sh.setFormatter(formatter)
log = logging.getLogger('DeviceMonitor_%s' % hostname)
log.addHandler(mh)
log.addHandler(sh)
log.setLevel(logging.INFO)
Ich möchte in der Lage sein, eine andere Stufe für den StreamHandler und den MongoHandler einzustellen. Ist das möglich oder muss ich ein zweites Logger-Objekt haben?
Sie können für jeden Protokollierungs-Handler eine andere Protokollierungsstufe festlegen, es scheint jedoch, dass Sie die Protokollierungsstufe auf die niedrigste Stufe setzen müssen. Im folgenden Beispiel habe ich den Logger auf DEBUG, den Stream-Handler auf INFO und TimedRotatingFileHandler auf DEBUG gesetzt. Die Datei hat also DEBUG-Einträge und der Stream gibt nur INFO aus. Sie können nicht nur DEBUG an einen einzigen Handler weiterleiten. Dafür benötigen Sie einen anderen Logger.
logger = logging.getLogger("mylog")
formatter = logging.Formatter('%(asctime)s | %(name)s | %(levelname)s: %(message)s')
logger.setLevel(logging.DEBUG)
stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.INFO)
stream_handler.setFormatter(formatter)
logFilePath = "my.log"
file_handler = logging.handlers.TimedRotatingFileHandler(filename = logFilePath, when = 'midnight', backupCount = 30)
file_handler.setFormatter(formatter)
file_handler.setLevel(logging.DEBUG)
logger.addHandler(file_handler)
logger.addHandler(stream_handler)
logger.info("Started");
try:
x = 14
y = 0
z = x / y
except Exception as ex:
logger.error("Operation failed.")
logger.debug("Encountered {0} when trying to perform calculation.".format(ex))
logger.info("Ended");
Eine Ergänzung zur Antwort von GrantVS:
Musste ich verwenden
logging.basicConfig(level=logging.DEBUG)
damit es funktioniert. Ansonsten gute Antwort, danke!
Mario
PS: Aus irgendeinem Grund lässt mich das System die Antwort von GrantVS nicht direkt kommentieren.
Ich brauchte eine Zeit, um den Punkt zu verstehen