Python Logging Setup

import logging

LOG_FMT = '[%(levelname)s] %(asctime)s: %(message)s'
LOG_DATE_FMT = '%Y-%m-%d %H:%M:%S'
logging.basicConfig(filename='search_results.log', format=LOG_FMT, datefmt=LOG_DATE_FMT, level=logging.DEBUG)

console = logging.StreamHandler()
console.setLevel(logging.INFO)
formatter = logging.Formatter(fmt=LOG_FMT, datefmt=LOG_DATE_FMT)
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)
### Python `logging` 库的使用指南与功能介绍 #### 1. 概述 Python 的 `logging` 模块是一个内置的日志记录工具,无需额外安装即可使用。它提供了灵活且强大的日志管理能力,适用于各种规模的应用程序开发场景[^2]。通过合理配置和使用此模块,可以有效实现程序运行状态跟踪、错误诊断以及性能分析等功能。 --- #### 2. 核心组件说明 ##### (1) **Logger** 负责接收应用程序发出的日志消息,并决定这些消息应如何处理。可以通过调用 `logging.getLogger(name)` 方法获得特定名称下的 Logger 对象实例;如果未指定名字,则默认返回根记录器(root logger)。每个模块或者独立的功能单元通常建议拥有自己专属的 Logger 来便于区分来源并分类管理日志信息[^4]。 示例代码: ```python import logging logger = logging.getLogger('example_logger') ``` --- ##### (2) **Handler** 用来定义日志输出目标的位置或方式,比如控制台终端显示、写入本地文件甚至是远程服务器上传等。常见的 Handlers 类型包括但不限于 StreamHandler 和 FileHandler 。前者主要用于屏幕打印输出,后者则适合持久化存储到磁盘上[^5]。 示例代码: ```python # 控制台输出设置 ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) # 文件输出设置 fh = logging.FileHandler('app.log') fh.setLevel(logging.ERROR) ``` --- ##### (3) **Formatter** 规定了最终呈现给用户的格式样式,包含时间戳、进程ID、线程名、日志等级等多个字段选项组合而成的一条完整记录描述语句模板字符串[^5]。 示例代码: ```python formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') ch.setFormatter(formatter) fh.setFormatter(formatter) ``` --- ##### (4) **Level** 表示严重性的分级制度,默认存在五个主要级别由低至高分别是 DEBUG、INFO、WARNING、ERROR 和 CRITICAL ,分别对应不同程度的通知需求[^3]。 | Level Name | Numeric Value | |------------|---------------| | DEBUG | 10 | | INFO | 20 | | WARNING | 30 | | ERROR | 40 | | CRITICAL | 50 | --- #### 3. 配置流程详解 为了使整个系统能够按照预期工作,我们需要正确地连接以上提到的各种组成部分形成一条完整的链条关系网状结构图如下所示: 1. 创建 Logger; 2. 设置合适的 Log Level; 3. 添加至少一个 Handler 至该 Logger 下面; 4. 定义 Formatter 并绑定回相应的 Handler 上去[^3]。 综合案例演示: ```python import logging def setup_logging(): # Step 1: Create logger logger = logging.getLogger('example_app') logger.setLevel(logging.DEBUG) # Step 2 & 3: Add handlers with levels ch = logging.StreamHandler() fh = logging.FileHandler('application.log') ch.setLevel(logging.INFO) fh.setLevel(logging.WARNING) # Step 4: Define formatters and attach them to handlers simple_formatter = logging.Formatter('%(name)s - %(levelname)s - %(message)s') detailed_formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) ch.setFormatter(simple_formatter) fh.setFormatter(detailed_formatter) # Attach handlers to the logger logger.addHandler(ch) logger.addHandler(fh) return logger if __name__ == '__main__': log = setup_logging() log.debug("This is a debug message.") log.info("Informational message here.") log.warning("Warning occurred (%d apples)", 42) log.error("An error has happened!") log.critical("Critical issue detected!") ``` --- #### 4. 日志记录实践技巧 - **捕获异常**:利用 try-except 块配合 exc_info 参数自动附加堆栈轨迹详情。 示例代码: ```python try: result = 1 / 0 except ZeroDivisionError as e: logger.exception("Exception occurred", exc_info=True) ``` - **自定义 Logger 名称空间**:推荐基于包路径命名以减少冲突风险,例如 `'mypackage.mymodule'` 形式。 - **高级配置——字典风格**:对于大型项目而言采用 JSON/YAML 或者直接编写 Python 字典形式来进行集中统一管控更加高效便捷[^5]。 --- ### 结束语 通过对 Logging 模块的学习掌握基本概念之后就可以着手构建属于自己的健壮可靠的日志体系架构啦!记住适时调整 verbosity level 能够平衡好生产环境中的资源消耗问题哦! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值