大家好,今天我要和大家聊聊Python中的日志处理。还在用print调试代码吗?或者遇到线上问题却不知道出了什么状况?这就说明你需要好好学习一下日志处理了!Python的logging模块是一个强大的日志框架,今天我就带大家掌握这个必备技能。
## 1. 日志的基本使用 logging模块提供了简单易用的日志功能,我们先来看最基础的用法: ```python import logging # 配置基本的日志格式 logging.basicConfig( level=logging.INFO, # 设置日志级别 format='%(asctime)s - %(levelname)s - %(message)s' # 设置日志格式 ) # 输出不同级别的日志 logging.debug('这是debug信息') # 不会显示,因为级别设置为INFO logging.info('程序开始运行') logging.warning('这是一个警告') logging.error('出错了!') logging.critical('严重错误!')
运行后你会看到类似这样的输出:
2025-02-22 10:30:15,123 - INFO - 程序开始运行 2025-02-22 10:30:15,124 - WARNING - 这是一个警告 2025-02-22 10:30:15,125 - ERROR - 出错了! 2025-02-22 10:30:15,126 - CRITICAL - 严重错误!
小贴士:日志级别从低到高依次是:DEBUG < INFO < WARNING < ERROR < CRITICAL。只有大于等于设置级别的日志才会输出。
2. 配置日志输出到文件
在实际项目中,我们通常需要将日志保存到文件中:
import logging # 配置日志输出到文件 logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', filename='my_app.log', # 指定日志文件 filemode='a'# 'a'表示追加模式,'w'表示覆盖模式 ) def process_data(): logging.info('开始处理数据...') try: result = 10 / 0# 故意制造一个错误 except Exception as e: logging.error(f'处理数据时出错: {str(e)}') else: logging.info('数据处理完成') process_data()
3. 创建自定义的Logger
在大型项目中,我们通常需要创建多个Logger来分别处理不同模块的日志:
import logging # 创建Logger对象 logger = logging.getLogger('my_app') logger.setLevel(logging.DEBUG) # 创建控制台处理器 console_handler = logging.StreamHandler() console_handler.setLevel(logging.INFO) # 创建文件处理器 file_handler = logging.FileHandler('app.log') file_handler.setLevel(logging.DEBUG) # 创建格式化器 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') console_handler.setFormatter(formatter) file_handler.setFormatter(formatter) # 添加处理器到Logger logger.addHandler(console_handler) logger.addHandler(file_handler) # 使用Logger记录日志 def process_user(user_id): logger.info(f'开始处理用户{user_id}的数据') try: # 模拟一些操作 if user_id < 0: raise ValueError('用户ID不能为负数') logger.debug(f'用户{user_id}的数据处理成功') except Exception as e: logger.error(f'处理用户{user_id}数据时出错: {str(e)}') process_user(1) process_user(-1)
4. 日志轮转
当日志文件变得太大时,我们需要进行日志轮转:
import logging from logging.handlers import RotatingFileHandler # 创建Logger logger = logging.getLogger('my_app') logger.setLevel(logging.INFO) # 创建RotatingFileHandler # 最大文件大小为1MB,最多保留3个备份文件 handler = RotatingFileHandler( 'app.log', maxBytes=1024*1024, # 1MB backupCount=3 ) handler.setFormatter(logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s' )) logger.addHandler(handler) # 写入大量日志来测试轮转 for i in range(10000): logger.info(f'这是第{i}条日志消息')
5. 在类中使用日志
在面向对象编程中,我们可以这样使用日志:
import logging class UserManager: def __init__(self): self.logger = logging.getLogger('user_manager') self.logger.setLevel(logging.INFO) # 创建处理器和格式化器 handler = logging.StreamHandler() formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) handler.setFormatter(formatter) self.logger.addHandler(handler) def create_user(self, username): self.logger.info(f'正在创建用户: {username}') try: # 模拟用户创建过程 if len(username) < 3: raise ValueError('用户名太短') self.logger.debug(f'用户{username}创建成功') except Exception as e: self.logger.error(f'创建用户{username}失败: {str(e)}') raise # 使用示例 manager = UserManager() try: manager.create_user('ab') except: pass manager.create_user('alice')
学习要点总结
-
日志的基本配置和使用
-
不同的日志级别及其应用场景
-
如何将日志输出到文件
-
创建和配置自定义Logger
-
日志轮转的实现
-
在类中集成日志功能
练习题
-
创建一个日志系统,同时将ERROR级别以上的日志写入错误日志文件,其他日志写入普通日志文件
-
实现一个带日志功能的装饰器,记录函数的调用信息
-
为一个Web应用添加完整的日志系统,记录访问日志和错误日志
-
实现一个按天轮转的日志系统
注意事项
-
避免在同一个程序中多次调用basicConfig
-
合理设置日志级别,避免记录过多无用信息
-
日志文件要定期清理,防止占用过多磁盘空间
-
敏感信息不要写入日志
-
多进程环境下需要使用专门的日志处理器
合理使用日志可以帮助我们更好地了解程序的运行状况,快速定位问题。要养成写日志的好习惯,让你的程序更加健壮和可维护。
如果你有任何问题,欢迎在评论区讨论。下期我们将学习Python的性能优化技巧,记得关注我,我们下期见!
黑客/网络安全学习路线
今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。
网络安全学习资源分享:
下面给大家分享一份2025最新版的网络安全学习路线资料,帮助新人小白更系统、更快速的学习黑客技术!
一、2025最新网络安全学习路线
一个明确的学习路线可以帮助新人了解从哪里开始,按照什么顺序学习,以及需要掌握哪些知识点。
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
读者福利 |
优快云大礼包:《网络安全入门&进阶学习资源包》免费分享 (安全链接,放心点击)
我们把学习路线分成L1到L4四个阶段,一步步带你从入门到进阶,从理论到实战。

L1级别:网络安全的基础入门
L1阶段:我们会去了解计算机网络的基础知识,以及网络安全在行业的应用和分析;学习理解安全基础的核心原理,关键技术,以及PHP编程基础;通过证书考试,可以获得NISP/CISP。可就业安全运维工程师、等保测评工程师。

L2级别:网络安全的技术进阶
L2阶段我们会去学习渗透测试:包括情报收集、弱口令与口令爆破以及各大类型漏洞,还有漏洞挖掘和安全检查项目,可参加CISP-PTE证书考试。

L3级别:网络安全的高阶提升
L3阶段:我们会去学习反序列漏洞、RCE漏洞,也会学习到内网渗透实战、靶场实战和技术提取技术,系统学习Python编程和实战。参加CISP-PTE考试。

L4级别:网络安全的项目实战
L4阶段:我们会更加深入进行实战训练,包括代码审计、应急响应、红蓝对抗以及SRC的挖掘技术。并学习CTF夺旗赛的要点和刷题

整个网络安全学习路线L1主要是对计算机网络安全的理论基础的一个学习掌握;而L3 L4更多的是通过项目实战来掌握核心技术,针对以上网安的学习路线我们也整理了对应的学习视频教程,和配套的学习资料。
二、技术文档和经典PDF书籍
书籍和学习文档资料是学习网络安全过程中必不可少的,我自己整理技术文档,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本,(书籍含电子版PDF)

三、网络安全视频教程
对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的网安视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识。
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

四、网络安全护网行动/CTF比赛
学以致用 ,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。

五、网络安全工具包、面试题和源码
“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。

面试不仅是技术的较量,更需要充分的准备。
在你已经掌握了技术之后,就需要开始准备面试,我们将提供精心整理的网安面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。
如果你是要找网安方面的工作,它们绝对能帮你大忙。
这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。
参考解析:深信服官网、奇安信官网、Freebuf、csdn等
内容特点:条理清晰,含图像化表示更加易懂。
内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…


**读者福利 |**
优快云大礼包:《网络安全入门&进阶学习资源包》免费分享 (安全链接,放心点击)