以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 TCP服务器未关闭电脑   在XML中定义“数字”时,java“imeOptions”不起作用   没有持久性的java Multiple entityManagerFactory。xml   java Netbeans使用Tomcat连接进行调试被拒绝   java二进制搜索已排序的E列表(开始时间,结束时间),以查找给定时间范围(t1,t2)匹配的所有E   python Jython等价于Java代码   java如何在Ninjaframework中的ConstraintValidator中使用依赖项注入?   Java扫描器类在C中做什么#   java同时支持公共接口API和内部具体API?   java如何使<T extends E>泛型类型参数包含在内?   java添加按钮在array或db中单击或点击以在安卓中重复相同的操作   xml解析Java:如何防止EntityResolver#resolveEntity(String publicId,String systemId)中的“systemId”被绝对化到当前工作目录   jakarta ee在Java中实现OAuth协议   JavaSpringMVC抛出了404,带有普通请求映射   java如何实现hibernate二级缓存上的查询与连接?   spring发生JNI错误,线程“main”java中出现异常。lang.NoClassDefFoundError:org/springframework/context/ApplicationContext   java为什么在此GraphQL设置中不调用DataFetcher?   java忽略cucumber中的特定标记,但运行所有其他标记