"""
structlog包特点:
1、容易记录
2、数据绑定
3、强大的流水线
4、格式化
5、输出
"""
"""
1、简单的输出
2、构建上下文,可以默认绑定输出一些必要的信息
3、在运行时操作日志条目,为每个事件字典添加时间戳
>>> import datetime
>>> def timestamper(_, __, event_dict):
... event_dict["time"] = datetime.datetime.now().isoformat()
... return event_dict
>>> structlog.configure(processors=[timestamper, structlog.processors.KeyValueRenderer()])
>>> structlog.get_logger().msg("hi")
event='hi' time='2018-01-21T09:37:36.976816'
4、渲染:以json形式输出字典
5、structlog和标准库logging
使用structlog.get_logger()就可以像之前log调用log包那样使用了
"""
"""
自己可以通过:wrap_logger()函数进行自定义绑定
"""
"""
配置:
必须依赖于配置 ----> structlog.get_logger()
使用初始化 -----> structlog.configure()
"""
"""
处理器
structlog附带一些标准的库特定处理器:
render_to_log_kwargs() : 将事件字典呈现为关键字参数logging.log(),将除事件字段之外的所有内容附加到额外参数。如果要完全呈现日志条目,这非常有用logging。
filter_by_level(): 根据标准库日志记录的配置检查日志条目的日志级别。低于阈值的日志条目将被静默删除。将它放在处理链的开头,以避免昂贵的操作首先发生。
add_logger_name():将记录器的名称添加到密钥下的事件字典中logger。
add_log_level():将日志级别添加到密钥下的事件字典中level。
add_log_level_number():将日志级别编号添加到密钥下的事件字典中level_number。日志级别编号映射到日志级别名称。Python stdlib使用它们来过滤逻辑。这会添加相同的数字,以便用户可以利用类似的过滤
level in ("warning", "error", "critical") level_number >= 30 名称到数字的映射是在 _NAME_TO_LEVEL
"""
"""
structlog包
structlog.get_logger(* args,** initial_values )
args - 未经修改传递给记录器工厂的可选位置参数。因此,它取决于工厂的意思。
initial_values - 用于预填充上下文的值。
structlog.wrap_logger(logger,processors = None,wrapper_class = None,context_class = None,cache_logger_on_first_use = None,logger_factory_args = None,** initial_values )
为任意记录器创建新的绑定记录器。可以使用设置processor,wrapper_class和context_class的默认值configure()。如果您在此处设置的属性,configure()调用都没有对影响各自的属性。
换句话说:选择性覆盖默认值同时保留一些 是可能的。
initial_values - 用于预填充上下文的值。
logger_factory_args(tuple) - *logger_factory_args如果不是None,则未经修改的值传递 给记录器工厂。
structlog.configure(processors = None,wrapper_class = None,context_class = None,logger_factory = None,cache_logger_on_first_use = None )
配置全局默认值,如果wrap_logger()没有参数调用它们,则使用它们
调用一次之后,is_configured()开始返回true
processors : 处理器列表
wrapper_class : 用于包装记录器
context_class : 用于内部上下文保持的类
logger_factory : 要调用工厂来创建一个应该被包装的新记录器
cache_logger_on_first_use (bool) : wrap_logger不会返回一个实际的包装记录器,而是一个在第一次使用时组装一个的代理。如果此选项设置为True,则会缓存此组装的记录器
structlog.reset_defaults():将全局默认值重置为内置默认值
structlog.is_configured() 返回是否structlog已配置。如果False,structlog运行内置默认值。
class structlog.PrintLogger(file = None )将事件打印到文件中。
"""