我在python2.7中使用logstash
为日志记录模块设置了以下配置文件[loggers]
keys=root,test
[handlers]
keys=remote
[formatters]
keys=standard
[logger_root]
level=NOTSET
handlers=remote
[logger_test]
level=DEBUG
handlers=remote
propagate=0
qualname=test
[handler_remote]
class=logstash.LogstashHandler
level=NOTSET
formatter=standard
args=(os.environ['hostname'], int(os.environ['port']))
[formatter_standard]
format=%(levelname)s - %(message)s
datefmt=
class=logging.Formatter
不幸的是,这与我为此示例制作文件的时间差不多。我使用一个名为logstash
的模块,它将我的日志消息发送出去以便远程查看。如果我尝试使用logging.config.fileConfig
加载此配置,则会收到无法找到logstash的错误。我所要做的就是在加载之前导入logstash,问题就消失了。
如果我可以将该import语句放入配置文件本身,那将是很好的,因此文件的加载器不需要知道或关心。对urlparse
之类的东西也很好,所以我不需要那么多的环境变量。
有办法做到这一点吗?
答案 0 :(得分:0)
这是一个相当古老的问题,但是如果有人还在寻找答案,我发布这个(可用于python2和python3)。
根据the documentation,您可以写出类似的内容:
class=ext://logstash.LogstashHandler
我不确定是否有必要在解析日志配置文件的脚本中导入logstash(因为logstash不属于标准库)。
但是我必须补充一点,这种机制在旧式日志记录配置文件中对我来说并不总是很好...所以如果这不起作用,我建议将你的配置文件变成一个yaml和使用这个相同的功能:
handlers:
remote:
class: ext://logstash.LogstashHandler
level: NOTSET
formatter: standard
对于其他args,我不知道如何编写它们,因为我找不到有关logstash的文档。如果它们是位置参数,那么这应该没问题(尽管我不确定在日志记录配置文件中使用int
):
args: [os.environ['hostname'], int(os.environ['port'])]
但如果它们是关键字参数,则应以另一种方式编写:
kw1: os.environ['hostname']
kw2: int(os.environ['port'])