跳转到主要内容

Python日志处理器,可以将消息发送到Graylog扩展日志格式(GELF)。

项目描述

PyPI Status Build Status Documentation Status Coverage Status

描述

Python日志处理器,可以将日志消息发送到Graylog扩展日志格式(GELF)。

graypy支持将GELF日志发送到Graylog2和Graylog3服务器。

安装

使用pip

安装基本的graypy Python日志处理器

pip install graypy

使用GELFRabbitHandler的要求进行安装

pip install graypy[amqp]

使用easy_install

安装基本的graypy Python日志处理器

easy_install graypy

使用GELFRabbitHandler的要求进行安装

easy_install graypy[amqp]

使用方法

graypy通过Python logging.Handler类的子类将GELF日志发送到Graylog服务器。

以下是graypy定义的以下可运行GELF日志处理器的列表

  • GELFUDPHandler - UDP日志转发

  • GELFTCPHandler - TCP日志转发

  • GELFTLSHandler - 带TLS支持的TCP日志转发

  • GELFHTTPHandler - HTTP日志转发

  • GELFRabbitHandler - RabbitMQ日志转发

UDP日志

使用 GELFUDPHandler 可以轻松地将UDP日志转发到本地托管的Graylog服务器

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 Graylog.')

UDP GELF Chunkers

GELF UDP ChunkingGELFUDPHandler 支持,并在其构造函数中的 gelf_chunker 参数中定义。默认情况下使用 GELFWarningChunker,因此,GELF消息如果数据块溢出(即包含超过128个数据块),将发出 GELFChunkOverflowWarning被丢弃

其他 gelf_chunker 选项也可用

  • BaseGELFChunker 会静默地丢弃数据块溢出的 GELF 消息

  • GELFTruncatingChunker 会发出 GELFChunkOverflowWarning 并简化、截断数据块溢出的 GELF 消息,以尝试发送一些内容到 Graylog。如果此过程无法防止另一个数据块溢出,则发出 GELFTruncationFailureWarning

RabbitMQ 日志

或者,使用 GELFRabbitHandler 将消息发送到 RabbitMQ,并配置您的 Graylog 服务器通过 AMQP 消费消息。这可以防止由于丢弃的 UDP 数据包而丢失日志消息(GELFUDPHandler 使用 UDP 将消息发送到 Graylog)。您需要配置 RabbitMQ 使用 gelf_log 队列,并将其绑定到 logging.gelf 交换,以便消息被正确路由到可以被 Graylog 消费的消息队列(队列和交换机名称可以按您的喜好自定义)。

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 Graylog.')

Django 日志

通过在您的 settings.py 中添加新的处理器,可以轻松地将 graypy 集成到 Django 的日志设置中。

LOGGING = {
    'version': 1,
    # other dictConfig keys here...
    'handlers': {
        'graypy': {
            'level': 'WARNING',
            'class': 'graypy.GELFUDPHandler',
            'host': 'localhost',
            'port': 12201,
        },
    },
    'loggers': {
        'django.request': {
            'handlers': ['graypy'],
            'level': 'ERROR',
            'propagate': True,
        },
    },
}

跟踪日志

默认情况下,捕获的异常跟踪信息会作为 full_message 字段添加到 GELF 日志中

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)

默认日志字段

如果可用,默认情况下会自动将一些调试日志字段添加到 GELF 日志中

  • function

  • pid

  • process_name

  • thread_name

您可以通过在处理器的构造函数中指定 debugging_fields=False 来禁用自动添加这些调试日志字段

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

添加自定义日志字段

graypy 还支持在发送到 Graylog 的 GELF 日志中包含自定义字段。这可以通过使用 Python 的 LoggerAdapterFilter 类来实现。

使用 LoggerAdapter

LoggerAdapter 使得向 GELF 日志消息中添加静态信息变得容易

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 Graylog from John.')

使用 Filter

Filter 提供了更大的灵活性,并允许向 GELF 日志中添加动态信息

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 Graylog from John.')

贡献者

  • Sever Banesiu

  • Daniel Miller

  • Tushar Makkar

  • Nathan Klapstein

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

graypy-2.1.0.tar.gz (24.2 kB 查看哈希值)

上传时间

构建分发

graypy-2.1.0-py2.py3-none-any.whl (29.9 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下提供支持