web-dev-qa-db-ja.com

Python 2.4.3:ConfigParser.NoSectionError:セクションなし: 'フォーマッター'

ロギング構成ファイルを使用してTimedRotatinigFileHandlerを実装しようとしています。

なんらかの理由で設定ファイルを取得しません。

どんな提案も歓迎します。


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'

ありがとう

23
user981163

エラーメッセージは厳密に正確ですが、誤解を招く可能性があります。

「フォーマッタ」セクションが欠落しているのは、ロギングモジュールがlogging.config.fileConfigに渡したファイルを見つけられないためです。

絶対ファイルパスを使用してください。

74
ekhumoro

はい、@ ekhumoroは正しかった。 loggingは絶対パスを期待しているようです。 Pythonチームはこのエラーメッセージをもっと読みやすいものに変更する必要があります。ファイルを表示できないだけで、設定ファイル自体が間違っているためです。

Djangoと同じように、設定ファイルでBASE_DIR変数を定義し、パスのプレフィックスとしてインポートしました。そして、ログファイルの作成を忘れないでください。作成されていない場合は親ディレクトリ。

パスとロガーを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

他のモジュールでは:

from config import logger
...

logger.info("Your loggings modules should work now!! - WesternGun")
5
WesternGun