python的结构化日志记录

structlog的Python项目详细描述


structlog Logo

structlog:python的结构化日志记录

Documentation Statushttps://travis-ci.org/hynek/structlog.svg?branch=masterTest CoverageCode style: black

structlog通过将结构添加到日志条目中,使得在python中登录不那么痛苦,而且功能更强大。

<>你是否想让{TT1}$关心日志条目的^ {STR 1 } $输出/强>,或者你更喜欢^ {STR 1 } $向前/<强>它们到像标准库^ {tT4}$模块的现有日志记录系统。

更容易记录

您可以停止编写散文,开始思考在键/值对上下文中发生的事件:

>>> fromstructlogimportget_logger>>> log=get_logger()>>> log.info("key_value_logging",out_of_the_box=True,effort=0)2016-04-20 16:20.13 key_value_logging              effort=0 out_of_the_box=True

现在,每个日志条目都是一个有意义的字典,而不是一个不透明的字符串!

数据绑定

由于日志条目是字典,您可以开始将键/值对绑定并重新绑定到日志记录器,以确保它们出现在以下每个日志调用中:

>>> log=log.bind(user="anonymous",some_key=23)>>> log=log.bind(user="hynek",another_key=42)>>> log.info("user.logged_in",happy=True)2016-04-20 16:20.13 user.logged_in                 another_key=42 happy=True some_key=23 user='hynek'

强大的管道

每个日志条目都经过一个processor pipeline函数链,这个函数链接收一个字典并返回一个新字典,该字典将被输入到下一个函数中。 允许简单但强大的数据操作:

deftimestamper(logger,log_method,event_dict):"""Add a timestamp to each log entry."""event_dict["timestamp"]=time.time()returnevent_dict

plenty of processors用于最常见的任务,structlog

  • call stack information(“这个日志条目是如何发生的?“,
  • …和exceptions(“发生了什么事”。
  • Unicode编码器/解码器。
  • 灵活^ ^ a10}。

格式化

^ tt1}$对于^ {EM1}$是完全灵活的,如何导出日志条目。 由于每个日志条目都是一个字典,因此可以将其格式化为any格式:

  • local development
  • 的彩色键/值格式
  • JSON为了便于分析,
  • 或者一些标准格式的解析器,比如nginx或apache httpd。

在内部,格式化程序是处理器,其返回值(通常是字符串)传递给负责消息输出的记录器。 structlog提供了多个现成的有用格式化程序。

输出

^ {Tt1} $也非常灵活,日志条目的最终输出:

  • 一个内置的轻量级打印机,如上面的示例所示。 使用方便快捷。
  • 使用standard library或twisted的日志模块实现兼容性。 在这种情况下,{TT1}$就像一个包装器,它将一个字符串格式化并传递到现有的系统中,这些系统永远不会知道^ {Tt1}$甚至存在。 或者反过来说:structlog附带了一个logging格式化程序,允许处理第三方日志记录。
  • 别把它格式化成字符串! structlog给你一本字典,你可以随心所欲地使用它。 报告的用例通过网络发送或保存在数据库中。

获得帮助

请使用StackOverflow上的structlog标记获取帮助。

回答其他开发人员的问题也是帮助项目的好方法!

项目信息

structlogApache License, version 2MIT下的双重授权,可从PyPI获得,源代码可在GitHub上找到,文档位于https://www.structlog.org/

structlog目标是python 2.7、3.4和更新版本,以及pypy。

发布信息

19.1.0(2019-02-02)

向后不兼容的更改:

  • 如18.1.0中所述,pip install -e .[dev]现在安装所有开发依赖项。 抱歉,这无疑会给您带来不便!

反对意见:

none

更改:

  • structlog.ReturnLoggerstructlog.PrintLogger现在有一个fatal()日志方法。 #181
  • 在某些(相当不清楚)情况下,帧提取可能抛出SystemError: error return without exception set。 解决办法是补充。 #174
  • structlog现在允许通过dicts传递到stdlib日志记录。 #187#188#189

Full changelog

作者

structlogHynek Schlawack编写和维护。 它的灵感来自于Jean-Paul CalderoneDavid Reid之前所做的工作。

这项发展得到了Variomedia AG的善意支持。

作者的完整列表可以在github的overview上找到。 其中一些不赞成添加线程本地上下文数据。:)

structlog徽标由Russell Keith-Magee提供。

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

推荐PyPI第三方库


热门话题
当通过libs中的JAR访问时,java安卓视图看起来不同   java如何使用Android Studio部署JavaFX项目?   java NoClassDefFoundErrorom/google/api/client/googleapis/batch/json/JsonBatchCallback   eclipse为什么在Java中调用setXmlStandalone()方法时出现异常:abstructmethoderror?   未导入java twitter4J TwitterStream   如何在java selenium中单击style属性的基础   java如何打印字符串中第一个字符的二进制表示   基于密钥的安卓-Java处理Json数组   java如何使手风琴正确显示动态信息   java是在Camel中测试对象的正确方法   每当试图显示通过USB从Arduino传入的数据时,java Android应用程序就会崩溃   编译器错误如何在命令行中设置java buildPath?   Java for loop/jvm坏了?!?循环内的递增运算符在1之后不递增   无法转换类型为“java”的属性值。lang.String“到所需类型”java。util。属性“开始时间”的“日期”   爪哇和C++中迭代器的区别是什么?   java查询生成器不能/不应该   java为什么Maven(在Netbeans下)没有为目标JDK1.6编译?