python的结构化日志记录
structlog的Python项目详细描述
structlog:python的结构化日志记录
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编码器/解码器。
格式化
^ tt1}$对于^ {EM1}$是完全灵活的,如何
- local development, 的彩色键/值格式
- JSON为了便于分析,
- 或者一些标准格式的解析器,比如nginx或apache httpd。
在内部,格式化程序是处理器,其返回值(通常是字符串)传递给负责消息输出的记录器。 structlog提供了多个现成的有用格式化程序。
输出
^ {Tt1} $也非常灵活,日志条目的最终输出:
- 一个内置的轻量级打印机,如上面的示例所示。 使用方便快捷。
- 使用standard library或twisted的日志模块实现兼容性。 在这种情况下,{TT1}$就像一个包装器,它将一个字符串格式化并传递到现有的系统中,这些系统永远不会知道^ {Tt1}$甚至存在。 或者反过来说:structlog附带了一个logging格式化程序,允许处理第三方日志记录。
- 别把它格式化成字符串! structlog给你一本字典,你可以随心所欲地使用它。 报告的用例通过网络发送或保存在数据库中。
项目信息
structlog是Apache License, version 2和MIT下的双重授权,可从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