当前位置: 首页 > news >正文

Python基础之日志封装

Python基础之日志封装

一、日志等级

Debug : 打印全部的日志,详细的信息,通常只出现在诊断问题上

Info : 打印info,warning,error,critical级别的日志,确认一切按预期运行

Warning : 打印warning,error,critical级别的日志,一个迹象表明,一些意想不到的事情发生了,或表明一些问题在不久的将来(例如,磁盘空间低),这个软件还能按预期工作

Error : 打印error,critical级别的日志,更严重的问题,软件没能执行一些功能

Critical : 打印critical级别,一个严重的错误,这表明程序本身可能无法继续运行

级别排序:CRITICAL > ERROR > WARNING > INFO > DEBUG

在控制台输出日志

import logging logging.basicConfig(level=logging.INFO) # 通过basicConfig设置日志级别 logging.debug("这是一条 debug 等级的日志") logging.info("这是一条 info 等级的日志") logging.warning("这是一条 warning 等级的日志") logging.error("这是一条 error 等级的日志") logging.critical("这是一条 critical 等级的日志") INFO:root:这是一条 info 等级的日志 WARNING:root:这是一条 warning 等级的日志 ERROR:root:这是一条 error 等级的日志 CRITICAL:root:这是一条 critical 等级的日志

运行上述代码,在控制台分别回显了 INFO 、WARNING、ERROR、CRITICAL级别的日志,是因为在日志配置函数basicConfig( ) 中 level = logging.INFO,等级低于 INFO 的 DEBUG 日志不会被记录,而等级等于或高于 INFO 的日志都会被记录

二、logging中常用方法

1、logging.Formatter: 这是一个配置日志格式的类,自定义日志按何种样式记录和展示;

2、logger = logging.getLogger( ): 生成一个logging模块的主体,为程序提供记录日志的接口,并根据日志级别把对应日志分发给不同 handler;

3、logging.FileHandler( ): 把日志记录输出到文件

4、logging.StreamHandler( ): 把日志记录输出出控制台

5、logger.setLevel( ): 设置总的日志级别

6、logger.addHandler( ): 添加一个Handler (FileHandler、StreamHandler)

7、Handler.setLevel( ): 设置handler 的日志级别

8、Handler.setFormatter( ): 设置handler 的输出格式

三、Formatter常用格式:

%(levelno)s: 打印日志级别的数值 %(levelname)s: 打印日志级别名称 %(pathname)s: 打印当前执行程序的路径 %(filename)s: 打印当前执行程序名 %(funcName)s: 打印日志的当前函数 %(lineno)d: 打印日志的当前行号 %(asctime)s: 打印日志的时间 %(thread)d: 打印线程ID %(threadName)s: 打印线程名称 %(process)d: 打印进程ID %(message)s: 打印日志信息

四、把日志输出到控制台

import logging logger = logging.getLogger() logger.setLevel(logging.INFO) ch = logging.StreamHandler() # 输出日志到控制台 ch.setLevel(logging.INFO) # 输出到控制台的日志等级 # 定义日志handler的输出格式 fmt = logging.Formatter('%(asctime)s - %(filename)s:[%(lineno)s] - [%(levelname)s] - %(message)s') ch.setFormatter(fmt) logger.addHandler(ch) logger.info("这是一个 INFO 日志") # 2021-06-30 10:29:46,043 - study02.py:[15] - [INFO] - 这是一个 INFO 日志

1、首先通过getLogger( ) 创建一个logging的主体对象logger,供程序调用;

2、通过 setLevel( ) 设置日志总的等级;

3、创建一个Handler对象ch,streamHandler 为输出日志到控制台;

4、为这个Handler实例ch 通过setLevel 设定输出到控制台的日志等级;

5、通过Formatter定义日志的输出格式fmt;

6、通过调用Handler的setFormatter把fmt对象作为参数传入来定义输出到控制台的日志格式;

7、调用logger.addHandler把Handler对象ch添加到logger主体中;

五、把日志输出到文件

import logging import time import os logger = logging.getLogger() logger.setLevel(logging.INFO) currTime = time.strftime("%Y-%m-%d") log_py_path = os.path.abspath(__file__) # 当前py文件的绝对路径,会定位到对应py文件 log_dir_path = os.path.split(log_py_path)[0] # 当前py文件的文件夹路径 pro_path = os.path.dirname(log_dir_path) # 当前py文件对应文件夹的上层目录路径 Log_path = pro_path + '/Logs/' log_name = Log_path + currTime + '.log' fh = logging.FileHandler(file_path, mode='a') # mode = 'a' 为在原日志上追加,'w'为覆盖 输出日志到文件 fh.setLevel(logging.INFO) # 输出到 file 的日志等级 # 定义日志handler的输出格式 fmt = logging.Formatter('%(asctime)s - %(filename)s:[%(lineno)s] - [%(levelname)s] - %(message)s') fh.setFormatter(fmt) logger.addHandler(fh) logger.info("这是一个 INFO 日志")

1、首先通过getLogger( ) 创建一个logging的对象主体logger,供程序调用;

2、通过 setLevel( ) 设置日志总的等级;

3、time.strftime("%Y-%m-%d") 获取当地时间按(年-月-日);

4、os.path.abspath(os.getcwd( )) 获取当前工作目录的绝对路径;

5、创建一个Handler对象fh,FileHandler 为输出日志到文件;

6、为这个Handler对象fh 通过setLevel 设定输出到文件的日志等级;

7、通过Formatter定义日志的输出格式fmt;

8、通过调用Handler的setFormatter把fmt对象作为参数传入来定义输出到控制台的日志格式;

9、调用logger.addHandler把Handler对象ch添加到logger主体中;

封装一个日志类

import logging import time import os class Logger: def __init__(self, name, logger_level='INFO', stream_level='INFO', file_level='INFO'): # 创建一个 logger self.__logger = logging.getLogger(name) # 设置Log等级总开关 self.__logger.setLevel(logger_level) # 创建 handler,用于日志写入 currTime = time.strftime("%Y-%m-%d-%H") # 获取日期年-月-日-时 log_py_path = os.path.abspath(__file__) # 当前py文件的绝对路径,会定位到对应py文件 log_dir_path = os.path.split(log_py_path)[0] # 当前py文件的文件夹路径 pro_path = os.path.dirname(log_dir_path) # 当前py文件对应文件夹的上层目录路径 Log_path = pro_path + '\\Logs\\' log_name = Log_path + currTime + '.log' fh = logging.FileHandler(log_name, mode='a') # mode = 'a' 为在原日志上追加,'w'为覆盖 输出日志到文件 fh.setLevel(file_level) # 输出到 file 的日志等级 ch = logging.StreamHandler() # 输出日志到控制台 ch.setLevel(stream_level) # 输出到控制台的日志等级 # 定义日志handler的输出格式 fmt = logging.Formatter('%(asctime)s - %(filename)s:[%(lineno)s] - [%(levelname)s] - %(message)s') fh.setFormatter(fmt) ch.setFormatter(fmt) # 添加 logger 到 handler里面 self.__logger.addHandler(fh) self.__logger.addHandler(ch) def get_logger(self): return self.__logger
http://www.jsqmd.com/news/1325765/

相关文章:

  • 河源房屋漏水怎么办?宅安选深耕全域5区县,专注解决本地各类季节性渗漏难题 - 宅安选房屋修缮
  • 上海不同品类黄金怎么回收?选易奢福注意鉴定安心变现 - 遁地的c
  • 告别Office安装噩梦!LKY_OfficeTools让你一键拥有完整办公套件
  • 2026技术趋势落地:AI低代码平台如何用“自然语言”重塑开发范式
  • 重庆能源工业学校2026年招生简章--公办重点学校,交通便利,管理严格 - 学习招生
  • Hive动态分区优化实践与性能调优指南
  • 食品加工厂地面清洁机器人实力盘点: 2026主流品牌多维度解读
  • 震撼!揭秘中国最强落锤冲击试验机如何定制而成
  • 金蝶ERP一套多少钱?2026年完整费用拆解,别只看报价单
  • 联想拯救者笔记本硬件控制终极指南:轻量开源工具完全使用教程
  • 深度探访天津市区各大回收商铺 筛选检测透明计价公正优质实体店 - 日常比对手册
  • 微信群投票怎么制作?2026 海投票小程序一键发起完整教程 - 微信投票小程序
  • SpringBoot+Vue档案管理系统开发全流程解析
  • 企业3A信用等级证书有啥用?办一套的费用是多少?千万别被坑了! - 实用干货补给站
  • 2026年7月新发布能定期同步案件进展的律师机构,五家专业机构深度解析 - 工业品牌热点
  • 深度解析NCM解密技术:ncmdump工具完整实践指南
  • CNN新闻听力训练:10分钟高效提升英语听力的系统方法
  • Unity RenderTexture渲染顺序问题深度解析与解决方案
  • 川沙装修公司我只服这家,连工会都来工地送清凉 - GEORANK
  • 深蓝词库转换:3分钟实现跨平台输入法词库自由
  • 氢储能微电网调度优化与Matlab实现
  • 51单片机项目实战:从零构建多功能时钟温度计,掌握嵌入式系统调度与模块化编程
  • 湖州本土装修企业深挖,2026年8月谁的落地适配能力更全面? - 优企甄选
  • 2026工厂弱电智能化售后服务商客户口碑力荐,高认可度品牌盘点,价格透明不踩坑 - 工业品牌热点
  • 2026年养殖环保升级,如何选择靠谱的生物有机肥高温好氧发酵罐厂家? - 优质品牌商家
  • 小微企业办企业3A证书多少钱?企业3A证书最快几天下证 - 实用干货补给站
  • 2026年四川硕儒教育口碑如何?学员真实评价告诉你真相 - GrowUME
  • LSLib终极指南:解锁《神界原罪》和《博德之门3》MOD制作的完整工具集
  • 丰台区民办学校学籍:2026 十二年一贯制的管理观察 - 运营深度观察
  • 3分钟掌握跨平台词库自由:深蓝词库转换终极指南