跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Python 日志记录
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= Python日志记录 = '''Python日志记录'''是软件开发中用于追踪程序运行时事件的重要机制。通过记录不同级别的信息(如调试信息、警告、错误等),开发者可以更高效地诊断问题、监控应用状态并分析用户行为。Python内置的<code>logging</code>模块提供了灵活的日志记录功能,适用于从简单脚本到大型应用程序的各种场景。 == 日志记录基础 == === 为什么需要日志记录? === * '''调试''': 记录程序执行流程,帮助定位错误。 * '''监控''': 跟踪应用程序的运行状态和性能。 * '''审计''': 记录用户操作或系统事件以满足合规要求。 === 日志级别 === Python定义了5个标准日志级别(按严重性递增): {| class="wikitable" ! 级别 !! 数值 !! 用途 |- | <code>DEBUG</code> || 10 || 详细调试信息 |- | <code>INFO</code> || 20 || 确认程序按预期运行 |- | <code>WARNING</code> || 30 || 潜在问题提示 |- | <code>ERROR</code> || 40 || 严重错误导致功能失效 |- | <code>CRITICAL</code> || 50 || 可能导致程序崩溃的严重错误 |} == 基本用法 == === 简单示例 === <syntaxhighlight lang="python"> import logging # 基础配置(输出到控制台) logging.basicConfig(level=logging.INFO) # 记录不同级别的日志 logging.debug("这条消息不会显示") # 级别低于INFO logging.info("程序启动") logging.warning("磁盘空间不足80%") logging.error("数据库连接失败") </syntaxhighlight> '''输出:''' <pre> INFO:root:程序启动 WARNING:root:磁盘空间不足80% ERROR:root:数据库连接失败 </pre> === 日志格式定制 === 通过<code>format</code>参数自定义输出格式: <syntaxhighlight lang="python"> logging.basicConfig( level=logging.INFO, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", datefmt="%Y-%m-%d %H:%M:%S" ) logging.info("格式化日志示例") </syntaxhighlight> '''输出:''' <pre> 2023-11-15 14:30:00 - root - INFO - 格式化日志示例 </pre> == 高级配置 == === 日志处理器(Handlers) === 将日志输出到不同目标: * <code>StreamHandler</code>: 输出到控制台(默认) * <code>FileHandler</code>: 写入文件 * <code>SMTPHandler</code>: 通过邮件发送错误日志 <syntaxhighlight lang="python"> logger = logging.getLogger("my_app") logger.setLevel(logging.DEBUG) # 创建文件处理器 file_handler = logging.FileHandler("app.log") file_handler.setLevel(logging.WARNING) # 创建控制台处理器 console_handler = logging.StreamHandler() console_handler.setLevel(logging.INFO) # 添加处理器到logger logger.addHandler(file_handler) logger.addHandler(console_handler) logger.info("这条信息会显示在控制台") logger.warning("这条警告会同时出现在控制台和文件") </syntaxhighlight> === 日志流程示意图 === <mermaid> graph TD A[Logger] --> B[Filter?] B --> C[Handler] C --> D[Formatter] D --> E[输出目标] </mermaid> == 实际应用案例 == === Web应用错误监控 === 记录Flask应用的错误和访问日志: <syntaxhighlight lang="python"> from flask import Flask import logging from logging.handlers import RotatingFileHandler app = Flask(__name__) # 配置滚动日志文件(最大1MB,保留3个备份) handler = RotatingFileHandler('app.log', maxBytes=1024*1024, backupCount=3) handler.setFormatter(logging.Formatter( '%(asctime)s %(levelname)s: %(message)s [in %(pathname)s:%(lineno)d]' )) app.logger.addHandler(handler) @app.route('/') def index(): app.logger.info('主页访问') return "Hello World" if __name__ == '__main__': app.run(debug=True) </syntaxhighlight> === 性能分析日志 === 记录函数执行时间: <syntaxhighlight lang="python"> import logging import time logging.basicConfig(level=logging.INFO) logger = logging.getLogger("perf") def time_it(func): def wrapper(*args, **kwargs): start = time.time() result = func(*args, **kwargs) duration = time.time() - start logger.info(f"{func.__name__} 执行耗时: {duration:.4f}秒") return result return wrapper @time_it def calculate_sum(n): return sum(range(n)) calculate_sum(10**6) </syntaxhighlight> '''输出:''' <pre> INFO:perf:calculate_sum 执行耗时: 0.0453秒 </pre> == 最佳实践 == 1. '''避免root logger''':为每个模块创建具名logger(<code>logging.getLogger(__name__)</code>) 2. '''合理设置级别''':生产环境通常使用INFO或WARNING级别 3. '''敏感信息过滤''':不要在日志中记录密码等敏感数据 4. '''使用结构化日志''':对于复杂系统,考虑JSON格式日志 5. '''日志轮转''':使用<code>RotatingFileHandler</code>或<code>TimedRotatingFileHandler</code>防止日志文件过大 == 数学表达式示例 == 当日志需要包含计算指标时,可以使用数学公式: <math> \log_{10} \left( \frac{\text{error\_count}}{\text{total\_requests}} \right) < \text{threshold} </math> == 总结 == Python的<code>logging</code>模块提供了强大而灵活的日志记录系统。通过合理配置日志级别、格式和处理器,开发者可以构建适合各种应用场景的日志解决方案。良好的日志实践能显著提高应用程序的可维护性和可调试性。 [[Category:编程语言]] [[Category:Python]] [[Category:Python 测试与调试]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)