Package: python3-logstash
# python-logstash## Python logging handler for Logstash.<https://www.elastic.co/products/logstash>### Notes:This is a copy of python-logstash: <https://pypi.python.org/pypi/python-logstash>That has been update to work with python 3.### InstallationUsing pip:`pip install python3-logstash`### Usage`LogstashHandler` is a custom logging handler which sends Logstash messages using UDP, or TCP.#### For example:```import loggingimport logstashimport syshost = '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 messageextra = {'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)```When using `extra` field make sure you don't use reserved names. From `Python documentation <https://docs.python.org/2/library/logging.html>`_.| "The keys in the dictionary passed in extra should not clash with the keys used by the logging system. (See the `Formatter <https://docs.python.org/2/library/logging.html#logging.Formatter>`_ documentation for more information on which keys are used by the logging system.)"To use the AMQPLogstashHandler you will need to install pika first.```pip install pika```For example::```import loggingimport logstashtest_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/0except:test_logger.exception('python-logstash-logger: Exception with stack trace!')```### Using with DjangoModify your `settings.py` to integrate `python3-logstash` with Django's logging::```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.},},'loggers': {'django.request': {'handlers': ['logstash'],'level': 'DEBUG','propagate': True,},},...}```### Using with GunicornCreate a logging.conf similar to this:```[loggers]keys=root, logstash.error, logstash.access[handlers]keys=console , logstash[formatters]keys=generic, access, json[logger_root]level=INFOhandlers=console[logger_logstash.error]level=INFOhandlers=logstashpropagate=1qualname=gunicorn.error[logger_logstash.access]level=INFOhandlers=logstashpropagate=0qualname=gunicorn.access[handler_console]class=logging.StreamHandlerformatter=genericargs=(sys.stdout, )[handler_logstash]class=logstash.TCPLogstashHandlerformatter=jsonargs=('localhost',5959)[formatter_generic]format=%(asctime)s [%(process)d] [%(levelname)s] %(message)sdatefmt=%Y-%m-%d %H:%M:%Sclass=logging.Formatter[formatter_access]format=%(message)sclass=logging.Formatter[formatter_json]class=jsonlogging.JSONFormatter```#### Note that I am using the jsonlogging module to parse the gunicorn logs### Sample logstash configuration(``logstash.conf``) for Receiving Events from python3-logstash is::```input {tcp {port => 5000codec => json}}output {stdout {codec => rubydebug}}```