Python logging handler that sends messages in GELF (Graylog Extended Log Format).
Project description
Installing
Using easy_install:
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.GELFHandler('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 (GELFHandler 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/', '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.GELFHandler('localhost', 12201) my_logger.addHandler(handler) try: puff_the_magic_dragon() except NameError: my_logger.debug('No dragons here.', exc_info=1)
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 argument to the hander:
handler = graypy.GELFHandler('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.GELFHandler('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.GELFHandler('localhost', 12201) my_logger.addHandler(handler) my_logger.addFilter(UsernameFilter()) mylogger.debug('Hello Graylog2 from John.')
Contributors:
Sever Banesiu
Daniel Miller
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file graypy-0.2.5.tar.gz
.
File metadata
- Download URL: graypy-0.2.5.tar.gz
- Upload date:
- Size: 5.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4bac9457014246e52a8f748528ee5cbd0f06b791b52976d2fac7aaec10f8f41c |
|
MD5 | 4b98a72a50ec82ed0c057c3eb1917929 |
|
BLAKE2b-256 | 0afc7d031ffad0e6897e127c0ba69da4fa7843360ad2ebd20250c63b03b35ec2 |