考虑以下 Python 代码片段logging
YAML 配置文件:
version: 1
formatters:
simple:
format: '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
handlers:
logfile:
class: logging.handlers.TimedRotatingFileHandler
level: DEBUG
filename: some_fancy_import_name.generate_filename_called_error
backupCount: 5
formatter: simple
我想以这种方式加载此 YAML 配置文件:
with open('logging.yaml', 'r') as fd:
config = yaml.safe_load(fd.read())
logging.config.dictConfig(config)
特别注意filename
到其中handler
应该写日志。在普通的Python代码中,我期望some_fancy_import_name.generate_filename_called_errorlog
生成字符串'error.log'
。总而言之,我想说这个日志处理程序应该写入文件'error.log'
在当前目录中。
然而,事实证明,事实并非如此。当我查看当前目录时,我看到一个名为'some_fancy_import_name.generate_filename_called_errorlog'
.
为什么要经历所有这些麻烦?
我想filename
以编程方式确定。我已成功尝试使用普通 Python 脚本配置日志记录:
# fancy import name
from os import environ as env
# Programmatically determine filename path
log_location = env.get('OPENSHIFT_LOG_DIR', '.')
log_filename = os.path.join(log_location, 'error')
handler = logging.handlers.TimedRotatingFileHandler(log_filename)
看看如何log_filename
路径是从环境变量推断出来的。
我想将其转换为 YAML 配置文件。是否可以?
也许我可能需要挖掘dict
由。。。生产yaml.safe_load(fd.read())
并做一些eval()
stuff?