Python之streamlog包语法、参数和实际应用案例

Python之streamlog包语法、参数和实际应用案例 一、streamlog 包核心概述streamlog是一个轻量级 Python 包核心功能是劫持并增强内置 print让每一次 print 同时输出到控制台 远程 HTTP APIPOST JSON无需改业务代码即可实现“本地打印远程日志流”。版本当前最新3.0.02025-01-11特点零侵入、异步非阻塞、网络失败不阻塞主程序、完全兼容原生 print 语法二、安装方法1. 稳定版安装推荐pipinstallstreamlog# 或pipinstallStreamLog2. 源码安装gitclone https://github.com/.../streamlog.gitcdstreamlog pipinstall.3. 版本验证importstreamlogprint(streamlog.__version__)# 输出 3.0.0三、核心语法与参数1. 核心入口enable_stream_log()fromStreamLogimportenable_stream_log# 启用劫持所有 print 同时发往 APIenable_stream_log(api_urlhttps://api.example.com/log,# 必选远程日志接口timeout5,# 可选HTTP 超时秒默认5retries2,# 可选失败重试次数默认2debugFalse# 可选是否打印内部错误默认False)# 正常使用 printprint(用户登录,useradmin,ip192.168.1.1)2. 参数详解enable_stream_log参数类型默认值说明api_urlstrhttp://example.com/api/logs远程日志接收接口POSTtimeoutint5单次 HTTP 请求超时秒retriesint2网络失败自动重试次数debugboolFalse是否在控制台打印 streamlog 自身错误3. 被劫持后 print 的行为控制台完全保留原生格式分隔符、end、file 等HTTP 发送异步 POST JSON{message:用户登录 useradmin ip192.168.1.1}失败处理网络异常/接口错误时仅在控制台打印StreamLog Error: ...不阻塞主程序四、8个实际应用案例案例1基础用法——控制台远程日志fromStreamLogimportenable_stream_log enable_stream_log(api_urlhttps://api.example.com/log)# 原生 print 不变print(系统启动成功)print(加载配置,configprod.json,sep | )效果控制台正常打印同时 POST 到远程接口。案例2Web 服务日志FastAPIfromfastapiimportFastAPIfromStreamLogimportenable_stream_log enable_stream_log(api_urlhttps://log-server.example.com/fastapi)appFastAPI()app.get(/)defroot():print(收到根路径请求,path/,methodGET)return{message:Hello World}价值不侵入路由逻辑自动收集所有请求日志到远程。案例3数据采集脚本日志importtimefromStreamLogimportenable_stream_log enable_stream_log(api_urlhttps://monitor.example.com/data)defcollect_data():foriinrange(10):print(f采集数据批次{i},f时间{time.ctime()})time.sleep(1)collect_data()价值长时间运行脚本日志实时上传监控平台。案例4带异常捕获的日志fromStreamLogimportenable_stream_log enable_stream_log(api_urlhttps://api.example.com/error)defdivide(a,b):try:resa/bprint(计算成功,f{a}/{b}{res})returnresexceptExceptionase:print(计算失败,f错误{e})raisedivide(10,0)价值异常信息自动远程上报便于集中监控。案例5多模块共享日志配置# main.pyfromStreamLogimportenable_stream_logimportmodule_a,module_b enable_stream_log(api_urlhttps://api.example.com/global)print(主模块启动)module_a.run()module_b.run()# module_a.pydefrun():print(模块 A 执行)# module_b.pydefrun():print(模块 B 执行)价值全局一次配置所有模块 print 自动远程。案例6自定义分隔符与 end 参数fromStreamLogimportenable_stream_log enable_stream_log(api_urlhttps://api.example.com/custom)print(用户,张三,年龄,25,sep - )print(加载进度,end)print(100%)控制台用户 - 张三 - 年龄 - 25 加载进度100%远程 JSON{message:用户 - 张三 - 年龄 - 25}{message:加载进度}{message:100%}案例7网络失败不阻塞主程序fromStreamLogimportenable_stream_logimporttime# 无效接口模拟网络失败enable_stream_log(api_urlhttps://invalid-url.example.com)print(第一条日志)time.sleep(1)print(第二条日志网络失败不阻塞)控制台输出第一条日志 StreamLog Error: Failed to send message to API: ... 第二条日志网络失败不阻塞案例8结合日志级别简易分级fromStreamLogimportenable_stream_log enable_stream_log(api_urlhttps://api.example.com/leveled)deflog_info(msg):print(f[INFO]{msg})deflog_error(msg):print(f[ERROR]{msg})log_info(服务正常运行)log_error(数据库连接超时)价值通过 print 前缀实现简易分级远程可过滤。五、常见错误与排查1. 安装失败pip install streamlog报错原因PyPI 包名大小写敏感正确包名是StreamLog。解决pipinstallStreamLog2. 启用后无远程日志发送可能原因api_url不可达防火墙、DNS、无效域名接口非 POST、非 JSON 接收网络超时/重试次数不足排查enable_stream_log(api_urlxxx,debugTrue)# 开启 debug 看内部错误3. 与其他日志库冲突如 logging、loguru现象print 重复输出、或远程日志丢失原因多个库劫持 sys.stdout解决仅在最终发布时启用 streamlog开发环境关闭 streamlog用原生 logging4. 多进程场景下日志重复/丢失现象子进程 print 未上传、或重复上传原因streamlog 仅劫持当前进程的 print解决每个子进程都调用一次enable_stream_log或改用主进程统一收集日志5. 中文乱码现象远程接口收到中文为乱码原因接口未指定 UTF-8解决确保接口接收 JSON 且编码为 UTF-8streamlog 默认 UTF-8六、使用注意事项零侵入但全局生效一旦 enable所有模块的 print 都会被劫持谨慎用于大型项目。异步非阻塞HTTP 发送在后台线程不影响主程序性能适合高吞吐场景。网络不可靠时降级网络失败仅打印错误绝不阻塞/崩溃主程序。不替代 logging 库适合轻量日志上报复杂分级/轮转/持久化仍用标准 logging。安全敏感信息print 密码、密钥会明文上传务必避免打印敏感数据。七、对比标准 logging StreamHandlerstreamlog✅ 零侵入、不改业务代码✅ 自动 JSON 格式、POST 上传❌ 无日志级别、无本地文件轮转logging StreamHandler✅ 分级、过滤、轮转、多 Handler❌ 需显式调用 logger.info()侵入代码❌ 需手动实现 HTTP 上传《动手学PyTorch建模与应用:从深度学习到大模型》是一本从零基础上手深度学习和大模型的PyTorch实战指南。全书共11章前6章涵盖深度学习基础包括张量运算、神经网络原理、数据预处理及卷积神经网络等后5章进阶探讨图像、文本、音频建模技术并结合Transformer架构解析大语言模型的开发实践。书中通过房价预测、图像分类等案例讲解模型构建方法每章附有动手练习题帮助读者巩固实战能力。内容兼顾数学原理与工程实现适配PyTorch框架最新技术发展趋势。