Est-ce que quelqu'un sait s'il existe un moyen d'utiliser une variable dans la fonction setlevel () du module de journalisation de Python?
En ce moment j'utilise ceci:
Log = logging.getLogger('myLogger')
Log.setLevel(logging.DEBUG)
Mais j'aimerais avoir ceci:
Log = logging.getLogger('myLogger')
levels = {'CRITICAL' : logging.critical,
'ERROR' : logging.error,
'WARNING' : logging.warning,
'INFO' : logging.info,
'DEBUG' : logging.debug
}
level = levels['INFO']
Log.setLevel(level)
Mais cela ne semble pas fonctionner - cela ne consigne rien.
Je fais cela pour pouvoir définir le niveau de journalisation pour tout un tas de scripts à partir d'une variable dans un seul fichier de configuration.
Vous devriez également pouvoir faire ceci:
Log = logging.getLogger('myLogger')
level = logging.getLevelName('INFO')
Log.setLevel(level)
La fonction logging.getLevelName(lvl)
fonctionne dans les deux sens. Je l'utilise, cela fonctionne (vous devriez vérifier votre python cependant).
Cela vous évite d'avoir à gérer votre propre dictionnaire et réduit le risque d'erreurs de frappe.
J'ai eu des problèmes avec python 3 et je l'ai fait fonctionner pour moi: https://docs.python.org/3/howto/logging.html
# myapp.py
import logging
import mylib
def main():
logging.basicConfig(filename='myapp.log', level=logging.INFO)
logging.info('Started')
mylib.do_something()
logging.info('Finished')
if __== '__main__':
main()
Qu'en est-il de l'utilisation de getattr
sur le module logging
?
import logging
str_level = 'DEBUG'
level = getattr(logging, str_level)
logger = logging.getLogger("my_logger")
logger.setLevel(level)
print(logger.getEffectiveLevel())
logging.setLevel()
prend un entier o une chaîne.
Donc, ce qui suit fonctionne très bien (au moins dans Python 3.7):
logger = logging.getLogger(__name__)
logger.setLevel("DEBUG")