以graylog扩展日志格式(gelf)发送消息的python日志处理程序。
grayp的Python项目详细描述
安装
使用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的LoggerAdapter和Filter类来实现。
使用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