以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程序在minecraft中移动minecraft角色的相机   java输出文本文件中的变量   java LazyLoadingException在我尝试从多通关系获取对象时出现   java json rest API的错误:ClassCastException:org。json。无法将JSONObject强制转换为组织。json。杰索纳雷   java BigInteger。C中的intValue()等价物#   java大写所有字符,但不包括带引号字符串中的字符   java获取特殊字符   javascript为什么Selenium中的所有getX()调用都需要这么长时间?   rabbitmq rabbitmq java客户端并行消费   如何使用selenium Java在popover窗口中提取文本   对象在java中构造一类对象   java Room数据库未实现   json JSONObject可以使用java保存大的格式化双值吗?   有时限的旅行推销员   java HttpsURLConnection openConnection查询   java无法使用Spring@Entity注释创建MySQL表   lambda Java 8仅映射到值类型集合   java提供OSGi服务而不实现接口   java单个对象重写对象数组,不确定原因