-
loguru的核心是只有一个记录器,默认是stderr
-
记录器只是一个接口,它将日志消息分派给已配置的处理程序。如何添加处理程序?如何设置日志格式?如何过滤邮件?如何设置级别? 答案:add()函数
logger.add(sys.stderr, format=“{time} {level} {message}”, filter=“my_module”, level=“INFO”)
-
取代默认的stderr处理程序,只需调用logger.remove()
-
将日志记录到文件
logger.add(“file_{time}.log”)
logger.add(“file_1.log”, rotation=“500 MB”) # 文件过大时自动滚动
logger.add(“file_2.log”, rotation=“12:00”) # 每天中午12:00创建新文件
logger.add(“file_3.log”, rotation=“1 week”) # 超过一周,自动创建新文件
logger.add(“file_X.log”, retention=“10 days”) # 一段时间10天后清除
logger.add(“file_Y.log”, compression=“zip”) # 压缩节省空间
logger.info(“If you’re using Python {}, prefer {feature} of course!”, 3.6, feature=“f-strings”) # 有比%更强大的格式化,{}占位符
-
线程或主线程内异常捕获
@logger.catch
def my_function(x, y, z):
return 1 / (x + y + z)
-
用颜色记录日志
logger.add(sys.stdout, colorize=True, format=“{time} {message}”)
-
异步,进程安全,多线程安全的记录日志,通过排队的方式记录日志
logger.add(“somefile.log”, enqueue=True)
-
希望日志序列化以便于分析或传递:使用serialize参数,每个日志消息将在发送到配置的接收器之前转换为JSON字符串。
logger.add(custom_sink_function, serialize=True)
-
使用bind记录日志上下文
logger.add(“file.log”, format=“{extra[ip]} {extra[user]} {message}”)
context_logger = logger.bind(ip=“192.168.0.1”, user=“someone”)
context_logger.info(“Contextualize your logger easily”)
context_logger.bind(user=“someone_else”).info(“Inline binding of extra attribute”)
context_logger.info(“Use kwargs to add context during formatting: {user}”, user=“anybody”)
-
使用contextualize()临时修改上下文本地状态:
-
通过结合bind()和filter,可以对日志进行更细粒度的控制:
logger.add(“special.log”, filter=lambda record: “special” in record[“extra”])
logger.debug(“This message is not logged to the file”)
logger.bind(special=True).info(“This message, though, is logged to the file!”)
-
patch()方法允许动态值附加到每个新消息的记录dict
logger.add(sys.stderr, format=“{extra[utc]} {message}”)
logger = logger.patch(lambda record: record[“extra”].update(utc=datetime.utcnow()))
-
希望在生产中记录详细信息而不降低性能,可以使用opt()方法来实现这一点
logger.opt(lazy=True).debug(“If sink level <= DEBUG: {x}”, x=lambda: expensive_function(2 ** 64))
-
opt()有很多用途
logger.opt(exception=True).info(“Error stacktrace added to the log message (tuple accepted too)”) # 错误堆栈跟踪添加到日志消息
logger.opt(colors=True).info(“Per message colors”)
logger.opt(record=True).info(“Display values from the record (eg. {record[thread]})”)
logger.opt(raw=True).info(“Bypass sink formatting\n”)
logger.opt(depth=1).info(“Use parent stack context (useful within wrapped functions)”)
logger.opt(capture=False).info(“Keyword arguments not added to {dest} dict”, dest=“extra”)
new_level = logger.level(“SNAKY”, no=38, color=“”, icon=“