Python日志文件配置KeyError:' formatters'

时间:2014-04-18 20:25:07

标签: python eclipse logging keyerror

我目前正在处理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。我还在Raspberry Pi上使用Raspbian Wheezy和Python 3.2以及在Eclipse中使用Python 2.7(相同的错误)测试它。

你们其中任何人都有线索吗?

5 个答案:

答案 0 :(得分:28)

我遇到了这个问题,因为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)

答案 1 :(得分:2)

尝试替换

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

用这个

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

不确定,但可能您的logging.conf位于当前工作目录中,而..找不到该文件。

答案 2 :(得分:0)

d512是正确的。 而且,当运行代码并基于PYTHONPATH时,无论运行文件位于何处,Python都将项目根目录视为“当前路径”。所以另一种方法是添加相对路径,如下所示:

logging.config.fileConfig('root_path_of_project/.../logging.conf')

希望有帮助

答案 3 :(得分:0)

在我的情况下,当我尝试在Docker容器上运行Flask应用程序时出现了此错误。

帮助我添加的内容:

flask db init

进入在容器创建开始时运行的boot.sh中。

答案 4 :(得分:0)

我的一些日志记录设置在 migrations/alembic.ini 中。

# Logging configuration
[loggers]
keys = root,sqlalchemy,alembic

我没有处理它,而是删除了迁移文件夹,删除了数据库中的 alembic_version 表,然后运行 ​​flask db stamp heads,然后当我再次添加列时可以执行正常的数据库操作。

# flask db init         # only needed when you don't have any db setup
flask db stamp head
flask db migrate
flask db upgrade