Salut
Je voudrais prolonger mon enregistreur (prise par logging.getLogger (« rrcheck »)) avec mes propres méthodes telles que: def warnpfx(...):
Comment écrire propres méthodes d'exploitation pour propres niveaux de journalisation
Comment faire le meilleur?
Mon souhait original est d'avoir un enregistreur racine écrit tout dans un fichier et en plus nommé logger ("rrcheck") écrivant à stdout, mais ce dernier devrait également avoir d'autres méthodes et niveaux. J'en ai besoin pour préfixer certains messages avec le préfixe "! PFXWRN" (mais seulement ceux qui vont sur stdout) et laisser les autres messages inchangés. Je voudrais également définir le niveau de journalisation séparément pour root et pour l'enregistreur nommé.
Ceci est mon code:
class CheloExtendedLogger(logging.Logger):
"""
Custom logger class with additional levels and methods
"""
WARNPFX = logging.WARNING+1
def __init__(self, name):
logging.Logger.__init__(self, name, logging.DEBUG)
logging.addLevelName(self.WARNPFX, 'WARNING')
console = logging.StreamHandler()
console.setLevel(logging.DEBUG)
# create formatter and add it to the handlers
formatter = logging.Formatter("%(asctime)s [%(funcName)s: %(filename)s,%(lineno)d] %(message)s")
console.setFormatter(formatter)
# add the handlers to logger
self.addHandler(console)
return
def warnpfx(self, msg, *args, **kw):
self.log(self.WARNPFX, "! PFXWRN %s" % msg, *args, **kw)
logging.setLoggerClass(CheloExtendedLogger)
rrclogger = logging.getLogger("rrcheck")
rrclogger.setLevel(logging.INFO)
def test():
rrclogger.debug("DEBUG message")
rrclogger.info("INFO message")
rrclogger.warnpfx("warning with prefix")
test()
Et ceci est une sortie - fonction et le numéro de lilne est erroné: warnpfx au lieu de essai
2011-02-10 14:36:51,482 [test: log4.py,35] INFO message
2011-02-10 14:36:51,497 [warnpfx: log4.py,26] ! PFXWRN warning with prefix
Peut-être ma propre approche de l'enregistreur est pas le meilleur?
Dans quelle direction iriez-vous (propre enregistreur, propre gestionnaire, propre formateur, etc.)?
Comment procéder si je souhaite avoir un autre enregistreur?
exploitation forestière Unfortunatelly n'a pas la possibilité d'enregistrer un enregistreur propre, donc alors getLogger (nom) prendrait une demande ...
Cordialement,
Zbigniew
Merci DzinX. J'ai fait quelques essais et j'ai l'impression d'appeler self._log au lieu de self.log. – Zbigniew
Aaah, c'est parce que 'currentframe()' renvoie la quatrième fonction supérieure sur la pile d'appel :) Quelle laideur d'entre eux :) – DzinX