支持GELF的日志处理程序

pygelf的Python项目详细描述


Pygelf

traviscoverallspypi

支持gelf(graylog扩展日志格式)的python日志处理程序。

目前支持TCP、UDP、TLS(加密TCP)和HTTP日志记录处理程序。

获取Pygelf

pipinstallpygelf

用法

frompygelfimportGelfTcpHandler,GelfUdpHandler,GelfTlsHandler,GelfHttpHandlerimportlogginglogging.basicConfig(level=logging.INFO)logger=logging.getLogger()logger.addHandler(GelfTcpHandler(host='127.0.0.1',port=9401))logger.addHandler(GelfUdpHandler(host='127.0.0.1',port=9402))logger.addHandler(GelfTlsHandler(host='127.0.0.1',port=9403))logger.addHandler(GelfHttpHandler(host='127.0.0.1',port=9404))logger.info('hello gelf')

消息结构

根据GELF规范,每条消息都有以下必需字段:

  • version:'1.1',可以在创建记录器时重写
  • 短消息:日志消息本身
  • 时间戳:当前时间戳
  • levelsyslog-compliant日志级别编号(例如,警告将作为4发送)
  • host:发送消息的计算机的主机名
  • full_消息:此字段包含堆栈跟踪,并且仅在记录异常时写入
try:1/0exceptZeroDivisionErrorase:logger.exception(e)

在调试模式下(使用debug=true选项创建处理程序时),每条消息都包含一些额外的字段(这些字段非常简单):

  • _文件
  • _行
  • u模块
  • \u函数
  • \u记录器名称

配置

每个处理程序都有以下参数:

  • host:GELF输入的IP地址
  • port:GELF输入的端口
  • debug(默认为false):如果为true,则每条日志消息将包括调试信息:模块名、文件名、行号、方法名
  • version(默认为“1.1”):可以重写GELF协议版本
  • include_extra_fields(默认为false):如果为true,则每条日志消息将包括设置为logrecord的所有额外字段
  • json_defaultstr除了几个datetime对象之外):函数,用于调用不能由python本机序列化为json的对象。默认实现是自定义函数,它返回datetime.datetimedatetime.timedatetime.date对象的isoformat()方法的结果,以及str(obj)调用其他对象的结果(这是对象的字符串表示,返回repr

此外,还有一些特定于处理程序的参数。

udp:

    {STR 1 } $ CukkSyth(默认为1300)-消息的最大长度。如果日志长度超过此值,它将分成多个块(请参阅https://www.graylog.org/resources/gelf/部分“chunked gelf”),长度等于此值。此参数必须小于MTU。如果日志似乎未被传递,请尝试减小此值。
  • compress(默认为true)-如果为true,则在将日志消息发送到服务器之前压缩它们

TLS:

  • validate(默认为false)-如果为true,则验证服务器证书。如果服务器提供了不存在于{STR 1 } $CAA Curts < /强>中的证书,则无法通过TLS
  • 发送日志。
  • ca_certs(默认情况下无)-ca束文件的路径。如果validate为true,则需要此参数。
  • certfile(默认情况下为none)-指向证书文件的路径,该文件将用于向远程终结点标识自己。当远程服务器需要客户端身份验证时,这是必需的。如果certfile包含私钥,则应将其放在证书之前。
  • keyfile(默认为none)-私钥的路径。如果私钥存储在certfile中,则此参数不能为none。

http:

静态字段

如果需要在日志中包含一些静态字段,只需将它们传递给处理程序构造函数。每个附加字段应以下划线开头。不能添加字段'\u id'。

示例:

handler=GelfUdpHandler(host='127.0.0.1',port=9402,_app_name='pygelf',_something=11)logger.addHandler(handler)

动态字段

如果需要将某些动态字段包含到日志中,请使用LoggingAdapter或Logging.Filter将其添加到记录中,并使用设置为true的include_extra_字段创建处理程序。 记录中所有不重要的字段都将发送到graylog2,并在名称前添加“\u”

示例:

classContextFilter(logging.Filter):deffilter(self,record):record.job_id=threading.local().process_idreturnTruelogger.addFilter(ContextFilter())handler=GelfUdpHandler(host='127.0.0.1',port=9402,include_extra_fields=True)logger.addHandler(handler)

运行测试

要运行测试,您需要tox。安装后,只需运行它即可:

tox

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

推荐PyPI第三方库


热门话题
java JAXB封送字符串,具有xml值,且不转义该值   java ModelMapper转换器不工作   java像HH000412或HCANN000001这样的前缀是什么意思?   验证日期输入修复java。lang.numberformatexception错误   当表具有外键时,java Telosys代码生成失败   如何使所有派生类一起只能实例化一个实例的单例抽象基类?(爪哇)   java如何在非静态服务类中使用广播接收器   java nutch爬虫相对URL问题   使用Jboss DMR下载/保存java附件   Rest模板:无法提取响应:当我们得到xml响应时,没有找到适合响应类型的HttpMessageConverter,没有绑定到JAVA对象   java如何编写可扩展窗格/面板/卡的代码   java是在ITreeViewerListener的treeExpanded()之前调用ContentProvider的getChildren()吗?   java将JComponent添加到小程序窗格   java混淆:使用简单逻辑的Flames程序