日志和CherryPy可以共享相同的配置文件吗?

时间:2010-09-14 14:53:13

标签: python logging cherrypy configparser

Python logging moduleCherryPy's Config API都使用ConfigParser个文件。因此,我假设我可以将一个配置文件用于我自己的应用程序配置,它的日志配置和CherryPy的配置。

当我的日志记录和CherryPy分开时,它们工作正常,我的配置文件使用ConfigParser api进行解析而没有错误。但是,CherryPy似乎在这一部分进行了讨论:

[loggers]
keys=root,myapp,cherrypy,cperror,cpaccess

给出以下例外:

Traceback (most recent call last):
  File "/usr/lib/python2.6/multiprocessing/process.py", line 232, in _bootstrap
    self.run()
  File "/usr/lib/python2.6/multiprocessing/process.py", line 88, in run
    self._target(*self._args, **self._kwargs)
  File "unittests.py", line 431, in main
    cherrypy.config.update(server.CONFIG_FILE)
  File "/usr/lib/pymodules/python2.6/cherrypy/_cpconfig.py", line 263, in update
    config = _Parser().dict_from_file(config)
  File "/usr/lib/pymodules/python2.6/cherrypy/_cpconfig.py", line 383, in dict_from_file
    return self.as_dict()
  File "/usr/lib/pymodules/python2.6/cherrypy/_cpconfig.py", line 374, in as_dict
    raise ValueError(msg, x.__class__.__name__, x.args)
ValueError: ("Config error in section: 'loggers', option: 'keys', value: 'root,myapp,cherrypy,cperror,cpaccess'. Config values must be valid Python.", 'TypeError', ("unrepr could not resolve the name 'root'",))

CherryPy文档从不说CherryPy需要将其配置文件与其他配置分开,但我开始认为这可能是必要的。文档说如果每个站点有多个应用程序,那么站点和应用程序配置可能需要分开,但似乎就像一个不同的问题...它是否错误地将我的日志配置错误地用于CherryPy应用程序配置?

这可能吗?如果没有,那么我不确定为什么CherryPy甚至会首先使用ConfigParser库。

1 个答案:

答案 0 :(得分:4)

简短的回答:不,你可能无法混合它们。如docs中所述:“配置条目始终是键/值对,如server.socket_port = 8080.键始终是名称,值始终是Python对象。即,如果值你设置的是一个int(或其他数字),它需要看起来像一个Python int;例如,8080。如果值是一个字符串,它需要被引用,就像一个Python字符串。“

即使我们想在CherryPy配置值中使用任意Python类型,CherryPy也只是使用ConfigParser,因为我们不想为节和语句语法编写自己的解析器。