用了loguru我才明白,Python日志还能这么写
⚡️ 为什么我暂时抛弃了 logging先说我踩过最大的坑logging 的默认输出是同步阻塞的FastAPI 的异步特性一来日志不但会打乱顺序还可能悄无声息地丢失。而且你要拿到一个像样的日志得先写几十行配置每次开新项目都要先把以前的代码复制过来烦得要死。而loguru一上来就告诉我别折腾了直接打就行。它只有一个全局的logger对象装上就能用彩色控制台输出自带日期、级别和超好看的格式。一句话清爽真的清爽。这里为什么我说是“暂时”呢是因为Loguru的魅力在于它直击痛点的简洁。用 logger.add() 一行代码就能搞定输出目标、格式、轮转策略等所有事情。不过它也存在短板。如果直接代替标准库可能出现业务代码用Loguru日志uvicorn服务器依然打官方日志的混乱局面或是要对标准库日志做好“拦截”避免重复刷屏。能用和用好是完全不同的两个维度。在大型项目里选择标准logging本质上不是因为它更好用而是因为它能让整个复杂的系统更好地在一起工作更具确定性和可控性。所以对于新项目建议从 Loguru 起步享受它的便利。当项目成长为大型/微服务架构时再将日志系统核心回迁到标准库logging dictConfig上。或组合使用各司其职Loguru 作用于你的业务代码 标准库logging作为“基础设施”兼顾开发体验和生产系统的兼容性。 安装与第一个日志好咱们先来安装。就一行uv add loguru然后在 FastAPI 里直接开怼from loguru import logger from fastapi import FastAPI app FastAPI() app.get(/) async def hello(): logger.info(有人访问了首页美滋滋) return {msg: Hello}跑起来后你的终端会立马出现一条带有时间戳、级别和高亮颜色的日志再也不用对着黑白海量的输出发呆了。这里有个问题在正式环境一定不要只往控制台打印接下来重点来了怎么把日志稳稳地写到文件里。 常用配置一次搞懂你可能会问“loguru 写文件是不是又要配一堆东西”完全不用一行搞定logger.add(app.log, rotation10 MB, retention7 days, levelINFO)你看rotation 按文件大小自动轮转retention 自动清理老日志而且压缩、自定义格式都能在同一个方法里搞定。这比 logging 的RotatingFileHandler TimedRotatingFileHandler那种套娃组合直观太多了。但说个容易翻车的点在 FastAPI 这种异步框架里千万别漏了 enqueueTrue 参数。官方示例可能没写但根据我线上血的教训不加这个参数多并发下日志写入会阻塞事件循环轻则响应变慢重则日志串行甚至丢数据。正确姿势logger.add(app.log, rotation10 MB, retention7 days, levelINFO, enqueueTrue)loguru 会把日志消息扔进一个线程安全的队列专门有后台线程负责写入你的主流程该干嘛干嘛完全不用分心。这就像点一杯奶茶小程序下单后不用在店里干等做好了自然叫你。 和 Uvicorn 的日志整合是不是以为这样就完了还有个折磨过我的地方FastAPI 底层用的 Uvicorn 自己也哗哗地打印日志两边各玩各的管理起来特难受。我的做法是在应用启动的地方把 Uvicorn 的日志也“绑架”到 loguru 里来import logging from loguru import logger class InterceptHandler(logging.Handler): def emit(self, record): logger_opt logger.opt(depth6, exceptionrecord.exc_info) logger_opt.log(record.levelname, record.getMessage()) # 在 FastAPI 的 lifespan 或 startup 事件里执行 logging.basicConfig(handlers[InterceptHandler()], level0)这样所有日志都汇聚到一个口子输出规则统一查找问题就像过红绿灯一次看清。但在实际开发时还有个问题就是如果启用了--reload模式或者使用命令fastapi dev main.py启动的项目那有些日志拦截还是会漏掉想办法把自定义的InterceptHandler拦截的更彻底些import logging from loguru import logger class InterceptHandler(logging.Handler): def emit(self, record): # 拿到对应的 loguru 级别 try: level logger.level(record.levelname).name except ValueError: level record.levelno # 找到调用栈里真正发出日志的地方 frame, depth logging.currentframe(), 2 while frame.f_code.co_filename logging.__file__: frame frame.f_back depth 1 logger.opt(depthdepth, exceptionrecord.exc_info).log(level, record.getMessage()) # 这里是关键启动的时候把 root logger 的所有旧 handler 都干掉 # 只留我们自己的 InterceptHandler def setup_logging(): logging.root.handlers [InterceptHandler()] logging.root.setLevel(logging.INFO) # 把 uvicorn 那几个 logger 也顺手接管 for name in (uvicorn, uvicorn.access, uvicorn.error): logging.getLogger(name).handlers [] logging.getLogger(name).propagate True # 在 FastAPI 应用实例化之前就调用 setup_logging()⚠️ 这些不足和注意点请刻在脑子里loguru 虽香但也别盲目吹。我总结了几个生产环境必须注意的 全局只有一个 logger多进程部署如Gunicorn多个worker时务必注意隔离避免写入冲突推荐每个进程单独 add 文件文件名可以用 PID 区分。 异常回溯虽然默认就漂亮但要捕获完整 traceback记得用logger.exception()或者在 add 时加上backtraceTrue。 敏感信息密码、token一定要在日志里脱敏loguru 支持 filter 功能可以优雅地过滤字段。 日志文件路径别写成相对路径否则在守护进程启动时可能写到莫名其妙的地方建议使用绝对路径或基于项目根目录拼接。

相关新闻

天工AI云系统落地江西新华九江印刷  树立书刊印刷智造升级新标杆

天工AI云系统落地江西新华九江印刷 树立书刊印刷智造升级新标杆

近日,中科天工自主研发的天工AI云智能管理系统在江西新华九江印刷有限公司(以下简称“九印公司”)完成部署并上线运行。此次合作以天工AI云系统为载体,双方共同打造书刊印刷企业数智化转型的示范项目,为行业探索出一条…

2026/7/8 5:26:51阅读更多 →
Linux环境变量完整知识点梳理

Linux环境变量完整知识点梳理

一、什么是环境变量 环境变量以变量名值的形式存储数据,由操作系统和Shell维护,用来保存会话信息、系统配置、用户相关信息,系统内所有程序、Shell脚本都可以直接读取使用。 Bash依靠环境变量记录当前工作环境的各类数据,整体分为…

2026/7/8 5:26:51阅读更多 →
LLM驱动的声学机器人无接触操控系统实战解析

LLM驱动的声学机器人无接触操控系统实战解析

1. 这不是科幻片——一个真实可运行的声学机器人集群系统长什么样“LLM驱动的分布式声学机器人协同无接触操控”——光看标题,很多人第一反应是实验室PPT里的概念图,或是某篇顶会论文里被层层抽象包裹的术语堆砌。但我在去年底接手的一个工业质检产线改造…

2026/7/8 5:21:51阅读更多 →
收付一体模式是什么?

收付一体模式是什么?

收付一体整合收款与付款全流程,属于一站式资金管理方案,能够统一归集企业全部营收资金,在线完成分账、批量代付、资金下发等操作,适配货款结算、工资代发、佣金分润等多种经营场景。整套业务形成完整收支闭环,每一笔资…

2026/7/8 6:26:57阅读更多 →
Linux上运行Photoshop CC 2022的终极解决方案:告别Windows依赖

Linux上运行Photoshop CC 2022的终极解决方案:告别Windows依赖

Linux上运行Photoshop CC 2022的终极解决方案:告别Windows依赖 【免费下载链接】Photoshop-CC2022-Linux Installer from Photoshop CC 2021 to 2022 on linux with a GUI 项目地址: https://gitcode.com/gh_mirrors/ph/Photoshop-CC2022-Linux 还在为Linux系…

2026/7/8 6:26:57阅读更多 →
5分钟学会QRazyBox:免费开源二维码修复工具,轻松拯救损坏的QR码

5分钟学会QRazyBox:免费开源二维码修复工具,轻松拯救损坏的QR码

5分钟学会QRazyBox:免费开源二维码修复工具,轻松拯救损坏的QR码 【免费下载链接】qrazybox QR Code Analysis and Recovery Toolkit 项目地址: https://gitcode.com/gh_mirrors/qr/qrazybox 你是否遇到过这样的情况?一张重要的二维码因…

2026/7/8 6:26:57阅读更多 →
Java程序员必看:收藏这份大模型学习指南,轻松转型AI高薪岗位!

Java程序员必看:收藏这份大模型学习指南,轻松转型AI高薪岗位!

随着ChatGPT的火爆,许多Java程序员开始关注AI领域。文章建议Java开发者不要抛弃现有技术,而是结合自身优势,学习如何将大模型应用于实际项目中。文章提供了学习路径,包括理解大模型的应用场景、掌握API调用、使用LangChain等框架进…

2026/7/8 6:26:57阅读更多 →
北极星知识图谱平台 | 四步盘活航空材料全量文献

北极星知识图谱平台 | 四步盘活航空材料全量文献

在航空航天与高端装备制造领域,大规格铝合金挤压棒材是不可或缺的关键结构材料。然而,在实际零部件设计中,此类棒材在纵向的力学与疲劳性能优异,但在横向上的强度指标往往显著降低。一旦盲目套用通用参数,将给装备埋下…

2026/7/8 6:26:57阅读更多 →
AI风口来袭:小白程序员如何精准定位,稳入大模型赛道?速收藏!

AI风口来袭:小白程序员如何精准定位,稳入大模型赛道?速收藏!

本文深入剖析AI行业的三层金字塔结构,从研发、应用到支持,揭示各岗位的真实需求和前景。通过真实案例,警示转行需谨慎,强调找准定位的重要性。文章提出科班生走研发、非科班生走应用、低学历走复合路线的建议,并强调地…

2026/7/8 6:21:57阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/8 5:12:14阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/7 2:56:31阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/8 2:26:06阅读更多 →
作为一个给团队打绩效的人,我想说几句

作为一个给团队打绩效的人,我想说几句

我每半年都会给团队成员打绩效,也会参与和 CTO 的绩效校准,所以从管理者的视角,说说这件事 首先,我先把结论告诉你:接受结果,但一定要把原因问清楚。 因为当绩效公布到你这里的时候,结果基本已…

2026/7/8 0:01:17阅读更多 →
A股股指期货:全维度解析(多表格结构化完整版)

A股股指期货:全维度解析(多表格结构化完整版)

一、基础定义与核心本质股指期货全称股票价格指数期货,是中国金融期货交易所(中金所)上市的标准化金融期货合约,交易标的为 A 股大盘指数,约定未来特定时间按约定价格现金交割指数涨跌差价,不交割一篮子股票…

2026/7/8 0:01:17阅读更多 →
iOS越狱新手指南:从困惑到掌控,3天解锁iPhone无限潜能的真实故事

iOS越狱新手指南:从困惑到掌控,3天解锁iPhone无限潜能的真实故事

iOS越狱新手指南:从困惑到掌控,3天解锁iPhone无限潜能的真实故事 【免费下载链接】Jailbreak iOS 26.4 - 26, 17 - 17.7.5 & iOS 18 - 18.7.3 Jailbreak Tools, Cydia/Sileo/Zebra Tweaks & Jailbreak News Updates || AI Jailbreak Finder &…

2026/7/8 0:01:17阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/7 5:11:21阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/7 5:11:21阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/7 5:11:21阅读更多 →