Python SysLogHandler -> syslog:logstash。设施未变
Posted
技术标签:
【中文标题】Python SysLogHandler -> syslog:logstash。设施未变【英文标题】:Python SysLogHandler -> syslog:logstash. facility not changed 【发布时间】:2014-09-03 12:55:04 【问题描述】:我尝试使用 logging.handlers.SysLogHandler 进行日志记录并将其发送到 logstash。
Python 代码:
import logging
from logging import handlers
# create logger
logger = logging.getLogger('simple_example')
logger.setLevel(logging.DEBUG)
# create console handler and set level to debug
ch = handlers.SysLogHandler(facility=handlers.SysLogHandler.LOG_AUTH)
ch.setLevel(logging.DEBUG)
# create formatter
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# add formatter to ch
ch.setFormatter(formatter)
# add ch to logger
logger.addHandler(ch)
logger.info('go')
logstash 配置:
input
syslog
output
stdout codec => rubydebug
输出logstash:
"message" => "<38>2014-09-03 12:48:36,700 - simple_example - INFO - go\u0000",
"@version" => "1",
"@timestamp" => "2014-09-03T12:48:36.702Z",
"host" => "127.0.0.1",
"tags" => [
[0] "_grokparsefailure"
],
"priority" => 13,
"severity" => 5,
"facility" => 1,
"facility_label" => "user-level",
"severity_label" => "Notice"
但是,如果我更改 facility=handlers.SysLogHandler.LOG_DAEMON 不改变输出logstash:
"message" => "<30>2014-09-03 12:51:52,307 - simple_example - INFO - go\u0000",
"@version" => "1",
"@timestamp" => "2014-09-03T12:51:52.307Z",
"host" => "127.0.0.1",
"tags" => [
[0] "_grokparsefailure"
],
"priority" => 13,
"severity" => 5,
"facility" => 1,
"facility_label" => "user-level",
"severity_label" => "Notice"
如何更改:设施、严重性、优先级、设施标签、严重性标签?
很可能是因为 Python 没有添加此信息:
output
stdout
2014-09-03T13:19:14.862+0000 127.0.0.1 <30>2014-09-03 13:19:14,860 - simple_example - INFO - go
但是如何添加呢?
【问题讨论】:
似乎 Python 制作了一种不适合日志存储的格式。此输入仅支持 RFC3164 syslog,但“2014-09-03T13:19:14.862+0000 127.0.0.1 2014-09-03 13:19:14,860 - simple_example - INFO - go”不同于 RFC3164 【参考方案1】:如何更改:设施、严重性、优先级、设施标签、 严重性标签?
查看logging.handlers 的文档:
您可以在 SysLogHandler 初始化中包含facility
。上面链接的文档中列出了允许的级别:
ch = handlers.SysLogHandler(facility=handlers.SysLogHandler.LOG_AUTH, facility=LOG_LOCAL0)
priority
是从日志级别映射的,该级别由消息发送者 logger.warn()
与 logger.info()
等设置。mapPriority
的文档指出,“默认算法映射调试、信息、警告, ERROR 和 CRITICAL 对应的 syslog 名称,所有其他级别的名称都对应 'warning'。"
【讨论】:
以上是关于Python SysLogHandler -> syslog:logstash。设施未变的主要内容,如果未能解决你的问题,请参考以下文章
基于 TCP 的 Python SysLogHandler:处理连接丢失
在 MAC OSX 上使用 Python 的 SyslogHandler 时,DEBUG 和 INFO 消息去哪里了?
如何在 Mac OS X *和* Debian (7) 上使用 SysLogHandler 或 syslog 从 Python 登录到 syslog