Skip to main content

Python logging handler that sends messages in Graylog Extended Log Format (GLEF).

Project description

PyPI_Status Build_Status Coverage_Status

Description

Python logging handlers that send messages in the Graylog Extended Log Format (GELF).

Installing

Using pip

Install the basic graypy python logging handlers

pip install graypy

Install with requirements for GELFRabbitHandler

pip install graypy[amqp]

Using easy_install

Install the basic graypy python logging handlers

easy_install graypy

Install with requirements for GELFRabbitHandler

easy_install graypy[amqp]

Usage

Messages are sent to Graylog2 using a custom handler for the builtin logging library in GELF format

import logging
import graypy

my_logger = logging.getLogger('test_logger')
my_logger.setLevel(logging.DEBUG)

handler = graypy.GELFUDPHandler('localhost', 12201)
my_logger.addHandler(handler)

my_logger.debug('Hello Graylog2.')

Alternately, use GELFRabbitHandler to send messages to RabbitMQ and configure your Graylog2 server to consume messages via AMQP. This prevents log messages from being lost due to dropped UDP packets (GELFUDPHandler sends messages to Graylog2 using UDP). You will need to configure RabbitMQ with a ‘gelf_log’ queue and bind it to the ‘logging.gelf’ exchange so messages are properly routed to a queue that can be consumed by Graylog2 (the queue and exchange names may be customized to your liking)

import logging
import graypy

my_logger = logging.getLogger('test_logger')
my_logger.setLevel(logging.DEBUG)

handler = graypy.GELFRabbitHandler('amqp://guest:guest@localhost/', exchange='logging.gelf')
my_logger.addHandler(handler)

my_logger.debug('Hello Graylog2.')

Tracebacks are added as full messages

import logging
import graypy

my_logger = logging.getLogger('test_logger')
my_logger.setLevel(logging.DEBUG)

handler = graypy.GELFUDPHandler('localhost', 12201)
my_logger.addHandler(handler)

try:
    puff_the_magic_dragon()
except NameError:
    my_logger.debug('No dragons here.', exc_info=1)

For more detailed usage information please see the documentation provided within graypy’s handler’s docstrings.

Using with Django

It’s easy to integrate graypy with Django’s logging settings. Just add a new handler in your settings.py:

LOGGING = {
    ...

    'handlers': {
        'graypy': {
            'level': 'WARNING',
            'class': 'graypy.GELFUDPHandler',
            'host': 'localhost',
            'port': 12201,
        },
    },

    'loggers': {
        'django.request': {
            'handlers': ['graypy'],
            'level': 'ERROR',
            'propagate': True,
        },
    },
}

Custom fields

A number of custom fields are automatically added if available:
  • function

  • pid

  • process_name

  • thread_name

You can disable these additional fields if you don’t want them by adding an the debugging_fields=False to the handler:

handler = graypy.GELFUDPHandler('localhost', 12201, debugging_fields=False)

graypy also supports additional fields to be included in the messages sent to Graylog2. This can be done by using Python’s LoggerAdapter and Filter. In general, LoggerAdapter makes it easy to add static information to your log messages and Filters give you more flexibility, for example to add additional information based on the message that is being logged.

Example using LoggerAdapter

import logging
import graypy

my_logger = logging.getLogger('test_logger')
my_logger.setLevel(logging.DEBUG)

handler = graypy.GELFUDPHandler('localhost', 12201)
my_logger.addHandler(handler)

my_adapter = logging.LoggerAdapter(logging.getLogger('test_logger'),
                                   {'username': 'John'})

my_adapter.debug('Hello Graylog2 from John.')

Example using Filter

import logging
import graypy

class UsernameFilter(logging.Filter):
    def __init__(self):
        # In an actual use case would dynamically get this
        # (e.g. from memcache)
        self.username = "John"

    def filter(self, record):
        record.username = self.username
        return True

my_logger = logging.getLogger('test_logger')
my_logger.setLevel(logging.DEBUG)

handler = graypy.GELFUDPHandler('localhost', 12201)
my_logger.addHandler(handler)

my_logger.addFilter(UsernameFilter())

my_logger.debug('Hello Graylog2 from John.')

Contributors:

  • Sever Banesiu

  • Daniel Miller

  • Tushar Makkar

  • Nathan Klapstein

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

graypy-1.1.2.tar.gz (17.6 kB view details)

Uploaded Source

Built Distribution

graypy-1.1.2-py2.py3-none-any.whl (22.0 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file graypy-1.1.2.tar.gz.

File metadata

  • Download URL: graypy-1.1.2.tar.gz
  • Upload date:
  • Size: 17.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/2.7.14

File hashes

Hashes for graypy-1.1.2.tar.gz
Algorithm Hash digest
SHA256 798617c2043f0cecaa032b45630f3a487a0686653aa7556155d3afd37bef6a41
MD5 3a7a955e51a0f93c85c1f16348784238
BLAKE2b-256 1796316595b7f10f513cfb519d702d8f6907bce871cffb81c3dee93556a09ae4

See more details on using hashes here.

File details

Details for the file graypy-1.1.2-py2.py3-none-any.whl.

File metadata

  • Download URL: graypy-1.1.2-py2.py3-none-any.whl
  • Upload date:
  • Size: 22.0 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/2.7.14

File hashes

Hashes for graypy-1.1.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 e0e18ac67c13129f6e75f1808ede72655763e958cbadd61e62bb1a4b764727f5
MD5 2d39403fb42fce360a92c538292778f9
BLAKE2b-256 63b7679fe127cf3f64982f5731165facee0187cc5695839141cccf9690bb894c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page