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