简单而强大的 Python 日志库
Loguru 是一个非常简单但功能强大的 Python 日志库,它可以让你用极少的代码就实现强大的日志功能。
安装
基本用法
创建 Logger 对象
设置日志级别
使用 logger 的 level() 方法可以设置日志级别,级别从低到高为:TRACE、DEBUG、INFO、SUCCESS、WARNING、ERROR、CRITICAL。值得注意的是,Loguru 还提供了一个额外的 SUCCESS 级别。
默认级别为 DEBUG,低于设置级别的日志不会被显示。
输出到控制台
默认 Loguru 会将日志输出到 sys.stderr,你可以通过 add() 指定其他输出方式:
输出到文件
输出日志到文件只需要提供文件名,Loguru 会自动处理后续的文件创建及回滚等操作:
Loguru 还提供了“热重载”功能,如果日志文件被删除或移动,将自动创建新的日志文件。
格式化日志
Loguru 支持非常丰富的参数格式设置,可以完全自定义日志内容和格式。一些常用的参数包括:
格式化对象 | 格式化语法 | 示例 |
---|---|---|
时间 | {time} {time:格式} | {time} , {time:YYYY-MM-DD HH:mm:ss} |
级别 | {level} | {level} |
消息 | {message} | {message} |
模块 | {module} | {module} |
函数 | {function} | {function} |
行号 | {line} | {line} |
进程 | {process} | {process} |
线程 | {thread} | {thread} |
文件名 | {file} | {file} |
Logger 名 | {name} | {name} |
异常 | {exception} | {exception} |
嵌套 | {time:{hour}} | {time:{hour}} |
条件表达式 | {level:样式 if 条件} | {level:红色 if level=="ERROR"} |
设置宽度 | {参数:<宽度} | {level:<8} |
设置精度 | {参数:.精度} | {level:.2f} |
设置颜色 | {参数:<颜色>} | {level:<red>} |
设置样式 | {参数:<样式>} | {message:<bold>} |
例如:
日志文件管理
Loguru 可以方便地对日志文件进行管理。
设置日志文件大小
通过 rotation
参数可以设置每个日志文件的最大大小:
设置回滚日志文件个数
通过 retention
参数可以设置保留的历史日志文件个数:
滚动日志文件
日志文件到达最大大小后会自动滚动,新的日志写入到新的文件。可以通过 rotate()
主动触发滚动。
异常捕获
Loguru 可以非常方便地记录异常信息。
记录异常信息
在 try except
中使用 logger.exception() 可以记录异常堆栈:
它会打印出完整的异常信息,像正常的 traceback 模块。
格式化异常显示
可以使用 format_exc
参数来格式化显示异常:
过滤日志
可以通过添加或删除过滤器来过滤日志。
添加过滤器
例如只记录 warning 及以上级别的日志:
删除过滤器
异步日志
Loguru 原生支持异步日志,可以通过 queue_size
参数开启。
这可以大大提升日志写入速度。
结构化日志
可以在日志中插入字典、JSON 等结构化数据:
非常方便后续日志分析。
最佳实践
在项目中,我建议以下最佳实践:
-
创建一个全局的 Loguru 对象 logger,作为日志的入口。
-
根据应用设置合理的日志级别,如 info 或 warning。
-
主要输出日志到文件,同时输出重要的日志到 console。
-
使用日志文件回滚,保证不会增大无限。
-
格式化日志,包含关键信息如时间、函数、行数等。
-
在必要时开启异步日志。
-
在 exception 中使用 logger.exception() 打印堆栈。
-
根据需要添加日志过滤器。
-
直接使用 Loguru,不需要标准 logging 模块。