通过 Python logging.config 配置应用程序
项目描述
克洛尔
Clor 是日志配置系统[ 1 ]的一个小型包装器,允许将其重用于一般应用程序配置。这个名字是这样创造的:“configurator”→“c10r”→“clor”。
用法
通常有一个配置模块(例如envconf.py)或一个 YAML 文件。这是一个 CherryPy 示例:
base = {
'global' : {
'server.socket_host' : '127.0.0.1',
'server.socket_port' : 8080,
'server.thread_pool' : 8
},
'app' : {
'api' : {
'/' : {
'request.dispatch' : {
'()' : 'cherrypy._cpdispatch.MethodDispatcher'
}
}
}
}
}
production = (base, {
'global' : {
'server.socket_host' : '0.0.0.0',
'server.thread_pool' : 16,
'tools.auth_basic.on' : True,
'tools.auth_basic.realm' : 'App',
'tools.auth_basic.checkpassword' : 'ext://someapp.password.checker'
},
})
development = (base, {
'global' : {
'server.thread_pool' : None,
},
'app' : {
'api' : {
'/' : {
'tools.response_headers.on' : True,
'tools.response_headers.headers' : [('Access-Control-Allow-Origin', '*')]
}
},
'api2' : 'cfg://app.api'
}
})
几点观察:
嵌套字典递归合并
logging的ext伪协议
logging的cfg伪协议
使用()键记录的实例化
具有None值的键被删除
然后在您的引导代码中,您可以执行以下操作:
import clor
from . import envconf
config = clor.configure(*getattr(envconf, 'production'))
cherrypy.config.update(config)
cherrypy.tree.mount(ApiApplication(), '/api', config['app']['api'])