日志记录和CherryPy可以共享同一配置文件吗?
Python的日志模块和CherryPy的配置API都使用ConfigParser文件。所以,我以为我可以用一个配置文件来同时管理我自己的应用配置、日志配置和CherryPy的配置。
当我的日志和CherryPy配置分开时,它们都能正常工作,而且我的配置文件在使用ConfigParser时没有任何错误。但是,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 个回答
4
简单来说:不,你可能不能把它们混在一起。正如文档中所说的:“配置项总是以键/值对的形式出现,比如 server.socket_port = 8080。这里的键总是一个名字,而值总是一个Python对象。也就是说,如果你设置的值是一个整数(或其他数字),它需要看起来像一个Python整数;例如,8080。如果值是字符串,它需要用引号括起来,就像Python字符串那样。”
虽然我们希望在CherryPy的配置值中使用任意的Python类型,但CherryPy使用ConfigParser是因为我们不想自己写一个解析器来处理这些部分和条目的语法。