web-dev-qa-db-fra.com

Utilisation d'une variable lors de l'appel à logger.setLevel

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.

47
Jak

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.

92

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()
8
svenhornberg

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())
4
Inego

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")
1
jrc