Logstash 的 Django 日志记录格式
Django logging format for Logstash
我正在尝试将我的 Django 应用程序配置为以 Logstash 易于使用的格式写入日志。 (灵感来自 Node 的 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
有人对如何JSON 以 Logstash 格式编码消息有建议吗?
使用 Python 2.7.9、Django 1.8 和 Logstash 1.5
这个 [1] 包提供了一个解决方案,但它不是使用格式化程序写入文件,而是直接提供一个处理程序来写入 logstash。
希望对您有所帮助。
您应该能够通过以下方式捕获 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"
}
}
}
我正在尝试将我的 Django 应用程序配置为以 Logstash 易于使用的格式写入日志。 (灵感来自 Node 的 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
有人对如何JSON 以 Logstash 格式编码消息有建议吗?
使用 Python 2.7.9、Django 1.8 和 Logstash 1.5
这个 [1] 包提供了一个解决方案,但它不是使用格式化程序写入文件,而是直接提供一个处理程序来写入 logstash。
希望对您有所帮助。
您应该能够通过以下方式捕获 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"
}
}
}