48

現在、python プロジェクトに取り組んでおり、構成ファイルを使用してログを設定しています。それはすでに機能しており、メッセージを必要に応じてログに記録していました。

しかし、いくつかのパッケージとモジュールを再配置した後、重要なエラーのみが発生します。

完全なトレースバック:

    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'

ここに私のログファイルがあります:

[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=

そして関連するコード:

if __name__ == '__main__':

    logging.config.fileConfig('../logging.conf', disable_existing_loggers=False)
    logger = logging.getLogger(__name__)

    obc = Onboard_computer('/dev/ttys001')
    obc.run()

Python Logging Tutorialとほぼ同じです。なぜそれが機能せず、気が狂ってしまうのか、私には本当にわかりません。コードもセットアップも何も変更せず、動作を停止し、Python がこの KeyError をスローします。

私のセットアップ: Mac OS X 10.9.2、PyDev および Python 3.3 を備えた Eclipse Kepler。また、Raspbian Wheezy と Python 3.2 を使用した Raspberry Pi と、Python 2.7 を使用した Eclipse でもテストしました (同じエラー)。

どなたか心当たりのある方はいらっしゃいませんか?

4

6 に答える 6

85

この問題は、Python が構成ファイルを見つけることができなかったために発生しましたが、エラー メッセージではわかりません。どうやら、コードが実行されているファイルに相対的な構成ファイルを探すのではなく、現在の作業ディレクトリ (から取得できますos.getcwd()) に相対的な構成ファイルを探します。次のコードを使用して、ロガーを初期化しました。このlog.configファイルは、このコードを実行しているファイルと同じディレクトリにあります。

from os import path
log_file_path = path.join(path.dirname(path.abspath(__file__)), 'log.config')
logging.config.fileConfig(log_file_path)
于 2016-07-30T23:27:06.063 に答える
2

交換してみる

logging.config.fileConfig('../logging.conf', disable_existing_loggers=False)

これとともに

logging.config.fileConfig('logging.conf', disable_existing_loggers=False)

確かではありませんが、おそらくlogging.conf現在の作業ディレクトリにあり..、ファイルが見つかりません。

于 2014-04-29T15:20:09.733 に答える
1

私の場合、logging.conf ファイルに次のものがありませんでした -

[formatters]
keys = json

以下はファイル全体の構造です -

[loggers]
keys = root,__main__

[logger_root]
handlers =

[logger___main__]
level = INFO
handlers = __main__
qualname = __main__

[handlers]
keys = __main__

[handler___main__]
class = StreamHandler
level = INFO
formatter = json
args = (sys.stdout,)

[formatters]
keys = json

[formatter_json]
format=%(asctime)f %(module)s %(levelname)s %(message)s %(funcName)s
class = pythonjsonlogger.jsonlogger.JsonFormatter

ロガーを使用する Python ファイル -

import logging.config
from os import path

log_file_path = path.join(path.dirname(path.abspath('logging.conf')), 'logging.conf')

logging.config.fileConfig(log_file_path, disable_existing_loggers=False)
logger = logging.getLogger(__name__)

logger.info('random message')  
#{"asctime": "2021-10-22 02:48:26,532", "module": "jsonLogger", "levelname": "INFO", "message": "random message", "funcName": "<module>"}

ところで、python-json-logger をインストールすることを忘れないでください。

于 2021-10-22T09:57:40.983 に答える