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.3.tar.gz (17.6 kB view details)

Uploaded Source

Built Distribution

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

Uploaded Python 2 Python 3

File details

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

File metadata

  • Download URL: graypy-1.1.3.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.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.6.3

File hashes

Hashes for graypy-1.1.3.tar.gz
Algorithm Hash digest
SHA256 02690c3da79d65f1ae207b44b8b82b20543be779d09a9200d7b35ccb49ea876e
MD5 79cdc62d8a451a6a0b692dea8c6b85c8
BLAKE2b-256 dd7da0d86ca38ee2e0553e9e6a2269d4623624358bd82f30662f887ac0ea326c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: graypy-1.1.3-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.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.6.3

File hashes

Hashes for graypy-1.1.3-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 b16f8e9543e06d51d2076b5a34c863a3bce9cf848e31b2eaf4baa78ee2e88cf7
MD5 ba975c32b095621a0ebd255a9c2a96dc
BLAKE2b-256 e3d9f5ee5da12750d3d2da4aa1e9645ac5bfdf63bbaca3fef5dc94aac23589de

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