以graylog扩展日志格式(gelf)发送消息的python日志处理程序。

grayp的Python项目详细描述


PyPI StatusBuild StatusDocumentation StatusCoverage Status

说明

在中发送日志消息的python日志处理程序 灰色日志扩展日志格式(GELF)。

GrayPy支持将GELF日志发送到GrayLog2和GrayLog3服务器。

安装

使用pip

安装基本的graypy python日志处理程序:

pip install graypy

安装时需要GELFRabbitHandler

pip install graypy[amqp]

使用简易安装

安装基本的graypy python日志处理程序:

easy_install graypy

安装时需要GELFRabbitHandler

easy_install graypy[amqp]

用法

graypy通过python的子类向graylog服务器发送gelf日志 logging.Handler类。

下面是由graypy定义的准备运行的gelf日志处理程序的列表:

  • GELFUDPHandler-udp日志转发
  • GELFTCPHandler-tcp日志转发
  • GELFTLSHandler-支持tls的tcp日志转发
  • GELFHTTPHandler-http日志转发
  • GELFRabbitHandler-rabbitmq日志转发

udp日志

可以轻松地将udp日志转发到本地托管的graylog服务器 GELFUDPHandler

importloggingimportgraypymy_logger=logging.getLogger('test_logger')my_logger.setLevel(logging.DEBUG)handler=graypy.GELFUDPHandler('localhost',12201)my_logger.addHandler(handler)my_logger.debug('Hello Graylog.')

rabbitmq日志

或者,使用GELFRabbitHandler将消息发送到rabbitmq和 将graylog服务器配置为通过amqp使用消息。这会阻止日志 由于丢弃的udp数据包(GELFUDPHandler发送)而丢失的消息 使用udp发送到graylog的消息)。您需要将rabbitmq配置为 gelf_log队列并将其绑定到logging.gelfexchange so消息 正确地路由到一个可以被graylog使用的队列(队列和 交换名称可以根据您的喜好定制)。

importloggingimportgraypymy_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测井

很容易将graypy与django的日志设置集成。只需添加一个 您的settings.py中的新处理程序:

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字段:

importloggingimportgraypymy_logger=logging.getLogger('test_logger')my_logger.setLevel(logging.DEBUG)handler=graypy.GELFUDPHandler('localhost',12201)my_logger.addHandler(handler)try:puff_the_magic_dragon()exceptNameError: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日志添加静态信息变得容易 消息:

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

使用过滤器

^ a8}提供了更多的灵活性,并允许动态信息为 添加到您的GELF日志中:

importloggingimportgraypyclassUsernameFilter(logging.Filter):def__init__(self):# In an actual use case would dynamically get this# (e.g. from memcache)self.username='John'deffilter(self,record):record.username=self.usernamereturnTruemy_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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java创建猜谜游戏程序   JavaWebSocketContainer。connectToServer似乎挂起了   如何在java中中断函数   java c#socket client multiple BeginSend()未到达服务器   不可见的组件然后在Java中的窗格之间切换   java在应用程序类中使用静态接口安全吗?   java等待函数完成,直到回调到来   使用DataOutputStream时的java新行,Android   java服务对象的定义是什么?   基于视图的javahibernate复合密钥   java将varchar连接到char在JPA(oracle)中不起作用   如何在java中通过point类读取多个点?