
Python日志logging模块详解及实例
91KB |
更新于2024-09-03
| 56 浏览量 | 举报
1
收藏
时间)s-%(name)s-%(levelname)s-%(message)s')
logger=logging.getLogger(__name__)
logger.debug("Start printing log")
logger.info("Doing something")
logger.warning("Something may fail.")
logger.info("Finished")
运行这段代码,你会看到控制台不仅输出了之前的信息和警告,还包含了调试(debug)级别的日志,因为我们将logger的级别设置为了DEBUG,这样所有高于或等于DEBUG级别的日志都会被记录。
2. 日志处理器(Handlers)
logging模块不仅支持控制台输出,还可以将日志写入文件、发送电子邮件、甚至通过网络发送。这通过添加不同的处理器(Handlers)来实现。例如,我们可以创建一个FileHandler来将日志信息写入文件:
```python
handler = logging.FileHandler('app.log')
handler.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.info("This will be written to the file")
```
这段代码会创建一个名为'app.log'的文件,并将所有INFO级别及以上的日志写入该文件。
3. 日志记录器(Logger)和日志级别
日志记录器是logging模块的核心,它负责收集和分发日志消息。每个日志记录器都可以有自己的日志级别,决定哪些消息会被处理。日志级别从低到高分别是DEBUG、INFO、WARNING、ERROR和CRITICAL。如果一个记录器的级别设置为WARNING,那么只有WARNING、ERROR和CRITICAL级别的消息会被处理,DEBUG和INFO级别的消息则会被忽略。
4. 日志过滤器(Filters)
除了日志级别,还可以使用过滤器进一步精细化控制日志的输出。过滤器可以根据各种条件(如日志记录器的名字、消息的内容等)来决定是否允许日志消息通过。
5. 日志记录格式
logging.Formatter类用于定义日志消息的格式。在上述示例中,我们定义了包含时间戳、日志记录器名称、日志级别和消息内容的格式。可以根据需求自定义格式。
6. 异步日志记录
对于高性能的应用,logging模块还提供了异步日志记录功能,可以提高日志处理的效率。
7. 日志 RotatingFileHandler 和 TimedRotatingFileHandler
在处理大量日志数据时,可能需要限制单个日志文件的大小或定期轮换日志文件。RotatingFileHandler 和 TimedRotatingFileHandler 分别根据文件大小和时间间隔自动管理日志文件。
8. 多线程和多进程日志
在多线程或多进程环境中,logging模块能够正确地处理来自不同线程或进程的日志消息,确保它们不会混淆。
总结,Python的logging模块提供了一个强大且灵活的日志系统,可以帮助开发者跟踪程序运行状态,记录错误信息,以及在需要时进行调试。通过设置不同的日志级别、处理器、过滤器和格式,可以定制适合项目的日志策略,从而提升开发效率和问题排查能力。无论是在小型脚本还是大型应用程序中,使用logging都是一个良好的实践。
相关推荐



















weixin_38620314
- 粉丝: 1
最新资源
- NornenJS: 利用NVIDIA显卡优化的云系统与流媒体网络客户端
- 实战指南:深度学习在中文实体识别的应用
- 第七届PeerCast黑客马拉松:语法注册与代码优化
- Mac用户必学:高效OmniPlan项目管理技巧
- 掌握Docker中系统Hubot的部署与运行技巧
- Grails宠物诊所Hilo示例应用程序的使用教程
- MATLAB实现视觉词袋与单应性在FashionMNIST数据的应用
- Matlab实现IMF经济数据周监测与OLS预测工具箱
- STM32F051 Discovery板LPC语音合成器介绍
- NetExt插件扩展 - Rodney Viana的项目克隆及使用指南
- MATLAB图像马赛克创建工具:顺序与并行GPU实现
- 掌握Java测试驱动开发:Mauricio Aniche书中的练习
- OpenAssemblyAB:让民众深入了解艾伯塔省议会决策
- 全面掌握Selenium Python自动化测试技术
- 《AndroidCasaCodigo》——探索Java在Android开发中的应用
- 简化彭博API应用开发:bloomberg-helper-daemon工具介绍
- 雅虎图像数据集上的对象识别深度学习实践
- Java、C++和Python编程挑战解决方案与测试指南
- 开源扫描器集合Scanners-Box:子域枚举与安全扫描工具
- DirectDebitAlbany库:生成Albany产品兼容直接借记记录
- 双焦点注意机制在Matlab代码中的应用
- JIRA插件开发实战:开源Jext实现泛信息化系统平台
- 12种创新的送礼方式及其技术实现指南
- Java实现OSTN02转换工具:东/北与纬度/经度互换