J'ai lu quelques articles à ce sujet mais je suis toujours confus. J'ai cette configuration de journalisation:
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)
Je veux pouvoir définir un niveau différent pour StreamHandler et MongoHandler. Est-ce possible ou dois-je avoir un deuxième enregistreur de journaux?
Vous pouvez définir un niveau de journalisation différent pour chaque gestionnaire de journalisation, mais il semble que vous devrez définir le niveau du consignateur sur "le plus bas". Dans l'exemple ci-dessous, je règle l'enregistreur sur DEBUG, le gestionnaire de flux sur INFO et le gestionnaire TimedRotatingFileHandler sur DEBUG. Donc, le fichier a des entrées DEBUG et le flux ne sort que INFO. Vous ne pouvez pas diriger uniquement DEBUG vers un seul et unique INFO vers un autre gestionnaire. Pour cela, vous aurez besoin d'un autre enregistreur.
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");
Un ajout à la réponse de GrantVS:
Je devais utiliser
logging.basicConfig(level=logging.DEBUG)
pour que cela fonctionne. Sinon bonne réponse, merci!
Mario
PS: Pour une raison quelconque, le système ne me permet pas de commenter directement la réponse de GrantVS.
J'avais besoin d'un temps pour comprendre le point