Je travaille actuellement sur un projet python et j'ai configuré la journalisation à l'aide d'un fichier de configuration. Il a déjà fonctionné et enregistrait mes messages comme je le voulais.
Mais ensuite, après avoir réorganisé certains packages et modules, je ne reçois qu'une erreur de clé.
Traceback complet:
Traceback (most recent call last):
File "/Volumes/Daten/Eclipse/workspace/Carputer/src/pyboard/__init__.py", line 42, in <module>
logging.config.fileConfig('../logging.conf', disable_existing_loggers=False)
File "/opt/local/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/logging/config.py", line 70, in fileConfig
formatters = _create_formatters(cp)
File "/opt/local/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/logging/config.py", line 103, in _create_formatters
flist = cp["formatters"]["keys"]
File "/opt/local/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/configparser.py", line 937, in __getitem__
raise KeyError(key)
KeyError: 'formatters'
Voici mon fichier journal:
[loggers]
keys=root,pyBoard
[handlers]
keys=consoleHandler
[formatters]
keys=detailedFormatter
[logger_root]
level=DEBUG
handlers=consoleHandler
[logger_pyBoard]
level=DEBUG
handlers=consoleHandler
qualname=pyBoard
propagate=0
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=detailedFormatter
args=(sys.stdout,)
[formatter_detailedFormatter]
format=%(asctime)s - %(name)s - %(levelname)s : Line %(lineno)s - %(message)s
datefmt=
Et le code correspondant:
if __name__ == '__main__':
logging.config.fileConfig('../logging.conf', disable_existing_loggers=False)
logger = logging.getLogger(__name__)
obc = Onboard_computer('/dev/ttys001')
obc.run()
C'est presque la même chose que dans le Python Logging Tutorial . Je ne comprends vraiment pas pourquoi cela ne fonctionne pas et ça rend fou. Cela a fonctionné, je n'ai rien changé sur le code ni sur la configuration, et cela a juste cessé de fonctionner et Python lance cette KeyError.
Ma configuration: Mac OS X 10.9.2, Eclipse Kepler avec PyDev et Python 3.3. Je l'ai également testé sur un Raspberry Pi avec Raspbian Wheezy et Python 3.2 et dans Eclipse avec Python 2.7 (même erreur).
Est-ce que quelqu'un d'entre vous a une idée?
J'ai eu ce problème parce que Python n'a pas pu trouver mon fichier de configuration, bien que vous ne le connaissiez jamais par le message d'erreur. Apparemment, il ne recherche pas le fichier de configuration par rapport au fichier dans lequel le est en cours d'exécution, mais plutôt par rapport au répertoire de travail actuel (que vous pouvez obtenir à partir de os.getcwd()
). J'ai utilisé le code suivant pour initialiser l'enregistreur. Le log.config
le fichier se trouve dans le même répertoire que le fichier exécutant ce code:
from os import path
log_file_path = path.join(path.dirname(path.abspath(__file__)), 'log.config')
logging.config.fileConfig(log_file_path)
Essayez de remplacer
logging.config.fileConfig('../logging.conf', disable_existing_loggers=False)
avec ça
logging.config.fileConfig('logging.conf', disable_existing_loggers=False)
Pas sûr, mais probablement votre logging.conf
se trouve dans votre répertoire de travail actuel et avec le ..
le fichier est introuvable.
d512 était correct. Et lors de l'exécution du code et sur la base du PYTHONPATH, Python traite le répertoire racine de votre projet comme le "chemin actuel", peu importe où se trouve votre fichier en cours d'exécution. Une autre façon consiste à ajouter le chemin relatif soit comme suit:
logging.config.fileConfig('root_path_of_project/.../logging.conf')
ou par rapport au fichier courant:
LOGGING_CONFIG = Path(__file__).parent / 'logging.conf'
...
logging.config.fileConfig(LOGGING_CONFIG)
J'espère que ça aide