Python 2.4.3: ConfigParser.NoSectionError: pas de section: 'formatters'
essayer d'utiliser un fichier de configuration de journalisation pour implémenter TimedRotatinigFileHandler
.
ne prend pas le fichier de configuration pour une raison quelconque.
toute suggestion est appréciée.
x.py:
import logging
import logging.config
import logging.handlers
logging.config.fileConfig("x.ini")
MyLog = logging.getLogger('x')
MyLog.debug('Starting')
x.ini:
[loggers]
keys=root
[logger_root]
level=NOTSET
handlers=trfhand
[handlers]
keys=trfhand
[handler_trfhand]
class=handlers.TimedRotatingFileHandler
when=M
interval=1
backupCount=11
formatter=generic
level=DEBUG
args=('/var/log/x.log',)
[formatters]
keys=generic
[formatter_generic]
class=logging.Formatter
format=%(asctime)s %(levelname)s %(message)s
datefmt=
Traceback (most recent call last):
File "x.py", line 5, in ?
logging.config.fileConfig("x.ini")
File "/usr/lib/python2.4/logging/config.py", line 76, in fileConfig
flist = cp.get("formatters", "keys")
File "/usr/lib/python2.4/ConfigParser.py", line 511, in get
raise NoSectionError(section)
ConfigParser.NoSectionError: No section: 'formatters'
Merci
2 réponses
le message d'erreur est strictement exact mais trompeur.
la raison pour laquelle la section "formatteurs" est manquante, c'est parce que le module de journalisation ne peut pas trouver le fichier que vous avez passé à logging.config.fileConfig
.
Essayez d'utiliser un chemin absolu du fichier.
Oui, @ekhumoro avait raison. Il semble que logging
attend un chemin absolu. l'équipe Python devrait changer ce message d'erreur en quelque chose de plus lisible; elle ne peut tout simplement pas voir mon Fichier, pas parce que le fichier de configuration lui-même est erroné.
j'ai réussi à résoudre ce problème en définissant un BASE_DIR
variable dans un fichier de configuration et l'importer comme préfixe du chemin, tout comme Django. Et n'oubliez pas de créer le dir parent du fichier journal s'ils ne sont pas créés.
je définissez le chemin et l'enregistreur dans config.py
:
import os
BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
import logging
import logging.config
logging.config.fileConfig(os.path.join(BASE_DIR, 'utils', 'logger.conf')) # the `logger.conf` locates under 'myproject/utils/'
logger = logging.getLogger("mylog") # 'mylog' should exist in `logger.conf` in the logger part
Dans les autres modules:
from config import logger
...
logger.info("Your loggings modules should work now!! - WesternGun")