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

18
demandé sur Adam Wagner 2011-10-28 01:25:28

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.

69
répondu ekhumoro 2011-10-27 22:21:51

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")
2
répondu WesternGun 2018-03-25 21:31:12