loguru 默认输出无时间戳和颜色,需显式配置:先 remove() 清默认 handler,再 add() 自定义 format 和 colorize=true;记录 dataframe 应避免直接传入,改用 shape/columns 提取或 head().to_string();文件日志需指定 utf-8 编码、正确轮转单位;多进程需各子进程重建 handler 或用 queue 模式;handler 是全局状态,每次运行前应先 remove()。

Loguru 的 logger 默认输出不带时间戳和级别颜色?
默认情况下,logger 确实只输出纯文本消息,没有时间、级别标识或颜色——这在数据分析中容易导致日志难以追溯上下文。必须显式配置才能获得可读性强的输出。
实操建议:
- 调用
logger.remove()清掉默认 handler,再用logger.add()自定义; - 加上
format参数,比如"{time:YYYY-MM-DD HH:mm:ss} | {level} | {message}"; - 加
colorize=True让级别自动着色(INFO蓝、WARNING黄、ERROR红); - 避免在 Jupyter 中反复
add()导致日志重复输出——每次运行前先remove()。
如何让 Loguru 记录 pandas DataFrame 的形状和列名而不卡住?
直接把 df 传给 logger.info(df) 会触发完整 repr 输出,大表可能阻塞或刷屏。这不是 bug,是设计使然:Loguru 默认深度序列化对象。
实操建议:
- 用
logger.info("data shape: {}, columns: {}", df.shape, list(df.columns))显式提取关键信息; - 若需快速检查样本,改用
logger.debug("sample:\n{}", df.head(3).to_string()),并确保to_string()限制行数和列宽; - 避免在
logger.trace()外使用repr(df)或df.info()——它们可能触发计算或 I/O; - 注意
logger的 level 设置:默认不输出debug和trace,需提前logger.level("DEBUG")或启动时设level="DEBUG"。
Loguru 写入文件时中文乱码或日志轮转失效?
常见于 Windows 环境或未指定编码,以及轮转条件写错单位(比如写成 "10 MB" 而非 "10MB",空格会导致解析失败)。
实操建议:
- 写文件必须显式指定
encoding="utf-8",尤其在 Windows 上; - 轮转大小写成
"10MB"(无空格)、时间写成"1 day"或"00:00"; - 用
rotation="500 MB"+retention="7 days"组合控制体积和留存,别只设 retention; - 路径含中文没问题,但确保父目录存在,Loguru 不自动创建多级目录——得先
os.makedirs(os.path.dirname(log_path), exist_ok=True)。
在 multiprocessing 场景下 Loguru 日志错乱或丢失?
Loguru 默认不是进程安全的。子进程继承 logger 配置但不共享 handler,若没重置,会出现日志不落盘、时间错乱、甚至 OSError。
实操建议:
- 每个子进程启动时调用
logger.remove()+logger.add(...)重建 handler(推荐); - 避免在主进程 add 文件 handler 后,子进程直接复用——它们会竞争写同一个文件;
- 如需集中写入,改用
queue模式:主进程开QueueHandler,子进程通过queue发日志,由主进程统一落盘; - 调试时临时启用
logger.add(sys.stderr, backtrace=True, diagnose=True),能暴露跨进程异常堆栈。
add() 就叠了两份输出。动手前先 logger.remove() 几乎成了条件反射。Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











