Logstash的{Django日志记录格式

时间:2015-05-23 02:24:19

标签: python django logstash

我试图将我的django应用程序配置为以Logstash易于使用的格式写入日志。 (受节点的Winston日志包的启发)

Logstash期望一个带有日志消息的JSON对象在密钥" @ message"和时间戳" @ timestamp"。有谁知道如何格式化这样的Django日志?

到目前为止,我有类似于django文档中的内容。

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
        }
    },
    'handlers': {
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': './logs/app.log',
        },
    },
    'loggers': {
        'django.request': {
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': True,
        },
    },
}

这就是这样的日志:

WARNING 2015-05-22 21:20:19,082 base 3360 4588670976 Not Found: /register/fwq

任何人都有关于如何以Logstash格式对邮件进行JSON编码的建议吗?

使用Python 2.7.9,Django 1.8和Logstash 1.5

2 个答案:

答案 0 :(得分:4)

这[1]包提供了一个解决方案,但它不是用格式化程序写入文件,而是直接提供写入logstash的处理程序。

希望这有帮助。

[1] https://github.com/vklochan/python-logstash

答案 1 :(得分:4)

您应该能够使用以下内容捕获Django日志:

图案:

DJANGO_LOGLEVEL (DEBUG|INFO|ERROR|WARNING|CRITICAL)
DJANGO_LOG %{DJANGO_LOGLEVEL:log_level}\s+%{TIMESTAMP_ISO8601:log_timestamp}\s+%{TZ:log_tz}\s+%{NOTSPACE:logger}\s+%{WORD:module}\s+%{POSINT:proc_id}\s+%{GREEDYDATA:content}

过滤器:

filter {
     if [type] == "django" {
        grok {
             match => ["message", "%{DJANGO_LOG}" ]
        }

        date {
            match => [ "timestamp", "ISO8601", "YYYY-MM-dd HH:mm:ss,SSS"]
            target => "@timestamp"
        }
     }
}
相关问题