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

syslog.syslog 与 SysLogHandler

如何使用 Django 1.3 日志字典配置设置 SysLogHandler

Syslog 处理程序仅限于 Windows 上的 UDP