【发布时间】:2016-07-25 15:23:33
【问题描述】:
考虑 Python logging YAML 配置文件的以下 sn-p:
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)
特别注意handler 应写入日志的filename。在普通的 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 配置文件。有可能吗?
也许我可能需要挖掘由yaml.safe_load(fd.read()) 生成的dict 并做一些eval() 的东西?
【问题讨论】:
-
不要在问题本身中回答问题。要么接受 flyx 的答案,要么将您的解决方案作为答案发布。