Logstash的Python日志处理器(分支版)
项目描述
python-logstash-tradingstrategy
Python的Logstash日志处理器。
注意: 这是一个从原始python-logstash项目分支出来的,用于Trading Strategy。它已经更新并修改了一些补丁,以支持高级功能。
变更日志
- 0.5.1:
如果LogStash格式化器在将消息作为JSON输出时出现问题,将提供更好的异常消息,以便给出可能出现问题的线索
- 0.5.0:
分支以进行新版本发布
向处理器添加了extra_fields参数
- 0.4.7
将几个敏感字段添加到skip_list中
- 0.4.6
更新字段名称以匹配Logstash团队支持的Java对应版本
- 0.4.5
允许传递交易所的路由键给AMQP处理器
- 0.4.4
修复了urllib导入的python3兼容性问题。
向easy_types中添加了long类型。
- 0.4.3
添加了AMQP处理器。
- 0.4.2
更新了README
向处理器添加了tags参数
- 0.4.1
添加了TCP处理器。
- 0.3.1
添加了对Python 3的支持
- 0.2.2
将处理器拆分为Handler和Formatter类
- 0.2.1
添加了对Logstash 1.2.x中新的JSON模式的支持。请参阅http://tobrunet.ch/2013/09/logstash-1-2-0-upgrade-notes-included/和https://logstash.jira.com/browse/LOGSTASH-675中的详细信息
添加了version参数。可用值:1(Logstash 1.2.x版本格式),0 - 默认(旧版本)。
安装
使用pip
pip install python-logstash
用法
LogstashHandler 是一个自定义日志处理器,它使用 UDP 发送 Logstash 消息。
例如:
import logging
import logstash
import sys
host = 'localhost'
test_logger = logging.getLogger('python-logstash-logger')
test_logger.setLevel(logging.INFO)
test_logger.addHandler(logstash.LogstashHandler(host, 5959, version=1))
# test_logger.addHandler(logstash.TCPLogstashHandler(host, 5959, version=1))
test_logger.error('python-logstash: test logstash error message.')
test_logger.info('python-logstash: test logstash info message.')
test_logger.warning('python-logstash: test logstash warning message.')
# add extra field to logstash message
extra = {
'test_string': 'python version: ' + repr(sys.version_info),
'test_boolean': True,
'test_dict': {'a': 1, 'b': 'c'},
'test_float': 1.23,
'test_integer': 123,
'test_list': [1, 2, '3'],
}
test_logger.info('python-logstash: test extra fields', extra=extra)
- 当使用 extra 字段时,请确保不要使用保留名称。来自 Python 文档。
- “传递给 extra 的字典中的键不应与日志系统使用的键冲突。(有关日志系统使用的键的更多信息,请参阅 Formatter 文档。)”
要使用 AMQPLogstashHandler,您首先需要安装 pika。
pip install pika
例如:
import logging
import logstash
test_logger = logging.getLogger('python-logstash-logger')
test_logger.setLevel(logging.INFO)
test_logger.addHandler(logstash.AMQPLogstashHandler(host='localhost', version=1))
test_logger.info('python-logstash: test logstash info message.')
try:
1/0
except:
test_logger.exception('python-logstash-logger: Exception with stack trace!')
您还可以向处理器传递额外的字段,这样这些字段就会出现在 Logstash 中
# Pass `application` field and `tags` to Logstash
# with every log message
tags = ["python"]
extra_fields = {"application": "my_application_name}
handler = logstash.UDPLogstashHandler(
logstash_server,
5959,
version=1,
tags=tags,
extra_fields==extra_fields,
)
与 Django 一起使用
修改您的 settings.py 以将 python-logstash 集成到 Django 的日志中
LOGGING = {
...
'handlers': {
'logstash': {
'level': 'DEBUG',
'class': 'logstash.LogstashHandler',
'host': 'localhost',
'port': 5959, # Default value: 5959
'version': 1, # Version of logstash event schema. Default value: 0 (for backward compatibility of the library)
'message_type': 'logstash', # 'type' field in logstash message. Default value: 'logstash'.
'fqdn': False, # Fully qualified domain name. Default value: false.
'tags': ['tag1', 'tag2'], # list of tags. Default: None.
'extra_fields': {
'server_name': 'myserver.local',
'server_ip': '10.74.22.12',
}, # dict of extra fields, always added to the log. Default: None.
},
},
'loggers': {
'django.request': {
'handlers': ['logstash'],
'level': 'DEBUG',
'propagate': True,
},
},
...
}
示例 Logstash 配置
接收来自 python-logstash 事件的示例 Logstash 配置(logstash.conf)为:
input {
udp {
port => 5959
codec => json
}
}
output {
stdout {
codec => rubydebug
}
}
对于 TCP 输入,您需要将 logstash 的输入更改为 tcp 并修改 django 日志处理器的类为 logstash.TCPLogstashHandler
版本
python3 -m venv venv
source venv/bin/activate
pip install setuptools twine
python setup.py bdist_wheel
twine build