Python中用logging模块打印日志的操作是什么
Admin 2022-08-08 群英技术资讯 282 次浏览
(1)5个日志等级/以及5个输出日志的内置函数
(2)日志收集器、日志输出渠道的概念
(3)如何自定义日志收集器
(4)如何封装自定义的日志收集器
python的官方库,打印日志用的,无需安装,使用时直接调用
(1)DEBUG:调试模式下的日志,只给程序员看的日志
(2)INFO:程序正常运行的时候输出的日志
(3)WARN/WARNING:警告信息,当前程序还可以运行,后面有可能出现问题
(4)ERROR:程序执行过程总的错误信息
(5)CRITICAL:发生严重错误,阻塞流程,程序可能无法继续运行
(1)logging.debug("调试日志信息")
(2)logging.info("重要日志信息")
(3)logging.warning("警告日志信息")
(4)logging.error("错误日志信息")
(5)logging.critical("致命日志信息")
1.3、日志收集器和日志输出渠道:
日志收集器:
默认收集器的名字为root,默认收集等级为WARNING,通过如下步骤设置收集器的等级
log = logging.getLogger() # 获取日志收集器,默认为root
log.setLevel("等级") # 等级必须大写
logging.basicConfig(level=logging.DEBUG) # 设置收集器的等级
日志输出渠道:
默认输出等级为WARNING
输出渠道支持:输出到文件夹和输出到控制台
Demo实例1——默认WARNING等级
import logging # 打印不同等级的日志(debug、info、warning、error、critical) # 如下5条日志,只会打印WARNING等级以后的日志 logging.debug("这是一条debug级别的日志") logging.info("这是一条info级别的日志") logging.warning("这是一条warning级别的日志") logging.error("这是一条error级别的日志") logging.critical("这是一条critical级别的日志")
运行结果 :(只会打印WARNING级别以上的日志)
WARNING:root:这是一条warning级别的日志
ERROR:root:这是一条error级别的日志
CRITICAL:root:这是一条critical级别的日志
Demo实例2——默认的日志收集器
import logging # # logging.basicConfig(level=logging.DEBUG) 设置日志级别 # 未指定name,默认返回自带的默认的root收集器 # 默认输出WARN级别以上的等级日志 # 如果设置了WARNING以下的等级,则输出WARNING等级以上的日志 # 如果设置了WARNING以上的等级,比如设置了ERROR,则输出ERROR等级以上的日志 log = logging.getLogger() # log.setLevel("DEBUG") # log.setLevel("INFO") # log.setLevel("WARNING") log.setLevel("ERROR") # log.setLevel("CRITICAL") logging.debug("这是一条debug级别的日志") logging.info("这是一条info级别的日志") logging.warning("这是一条warning级别的日志") logging.error("这是一条error级别的日志") logging.critical("这是一条critical级别的日志")
运行结果:
ERROR:root:这是一条error级别的日志
CRITICAL:root:这是一条critical级别的日志
log = logging.getLogger(name="rose_logger")
不传name参数时,默认返回收集器名字为“root”
传了name参数时,会创建一个新的日志收集器
2.2、创建日志收集渠道
(1)输出到控制台:
pycharm = logging.StreamHandler()
(2)输出到文件:
file = logging.FileHandler(os.getcwd()+r"\rose.log",encoding="utf-8")
file=handlers.TimedRotatingFileHandler(filename="test.log",when="D",interval=1,backupCount=10,encoding="utf-8")
注意点(参数):
filename, 日志的文件名称(包含路径)
when= 'h', 日志的切割单位
# S - Seconds 秒
# M - Minutes 分钟
# H - Hours 小时
# D - Days 天(24小时)
# midnight - roll over at midnight 日切
# W{0-6} - roll over on a certain day; 0 - Monday 周
interval=1, 滚动周期,与when='h'连动,1-表示以时间为周期
backupCount=0 保留日志文件的个数,设置为10,永远只保存最近的10个文件
2.3、创建日志的输出格式 (1)创建日志格式对象
pycharm_fmt = logging.Formatter(fmt=fmt1)
(2)将日志输出格式绑定到日志输出渠道
pycharm.setFormatter(fmt=pycharm_fmt) ——设置到控制台日志渠道
file.setFormatter(fmt=pycharm_fmt1)——设置到文件日志渠道
(3)常用的格式模板(也可以自己定义)
fmt1 = "%(asctime)s - [%(funcName)s-->line:%(lineno)d] - %(levelname)s:%(message)s"
fmt2 = '[%(asctime)s-%(name)s-%(levelname)s-%(filename)s-%(lineno)d]:%(message)s'
(4)格式必须按照指定的格式格式化。常用的如下:
%(asctime)s——当前时间
%(funcName)s——模块名
%(lineno)d——行号
%(levelname)s——日志等级名称
%(message)s——具体的日志内容
Demo实例3——自定义日志收集器和日志格式
import logging,os from logging import handlers # 1、创建日志收集器 log = logging.getLogger(name="rose_logger") # 2、创建日志收集渠道 # 输出控制台 pycharm = logging.StreamHandler() # 输出文件夹 file = logging.FileHandler(os.getcwd()+r"\rose.log",encoding="utf-8") # file = handlers.TimedRotatingFileHandler(filename="test.log",when="D",interval=1,backupCount=10,encoding="utf-8") # 3、创建日志的输出格式 fmt1 = "%(asctime)s - [%(funcName)s-->line:%(lineno)d] - %(levelname)s:%(message)s" # 创建一个日志输出对象 pycharm_fmt = logging.Formatter(fmt=fmt1) fmt2 = '[%(asctime)s-%(name)s-%(levelname)s-%(filename)s-%(lineno)d]:%(message)s' pycharm_fmt1 = logging.Formatter(fmt=fmt2) # 4、日志输出格式绑定到日志输出渠道 pycharm.setFormatter(fmt=pycharm_fmt) file.setFormatter(fmt=pycharm_fmt1) # 5、直接给收集器设置日志级别就可以了,渠道会继承收集器的日志级别 log.setLevel(level=logging.DEBUG) # 5、给收集渠道设置日志级别,文件渠道,控制台输出的级别不会一样 # pycharm.setLevel(logging.DEBUG) # 6、将日志收集渠道绑定到日志收集器 log.addHandler(pycharm) log.addHandler(file) log.info(msg="测试")
输出结果:
Demo实例4——封装自定义日志收集器
import logging from logging import handlers def create_log(name,level,filename,sh_level,fh_level): """ :param name: 日志收集器名字 :param level: 日志收集器的等级 :param filename: 日志文件的名称 :param sh_level: 控制台输出日志的等级 :param fh_level: 文件输出日志的等级 :return: 返回创建好的日志收集器 """ # 1、创建日志收集器 log = logging.getLogger(name) # 2、创建日志收集器的等级 log.setLevel(level=level) # 3、创建日志收集渠道和等级 sh = logging.StreamHandler() sh.setLevel(level=sh_level) log.addHandler(sh) fh = logging.FileHandler(filename=filename,encoding="utf-8") # fh1 = handlers.TimedRotatingFileHandler(filename=filename,when="D",interval=1,backupCount=10,encoding="utf-8") fh.setLevel(level=fh_level) log.addHandler(fh) # 4、设置日志的输出格式 formats = "%(asctime)s - [%(funcName)s-->line:%(lineno)d] - %(levelname)s:%(message)s" log_format = logging.Formatter(fmt=formats) sh.setFormatter(log_format) fh.setFormatter(log_format) return log if __name__ == '__main__': log = create_log(name="rose_log",level=logging.DEBUG,filename="test_log.log",sh_level=logging.DEBUG,fh_level=logging.DEBUG) log.info(msg="--------debug--------") log.info(msg="--------info--------") log.info(msg="--------warning--------") log.info(msg="--------error--------") log.info(msg="--------critical--------")
输出结果:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了如何用python开发Zeroc Ice应用,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
Python如何优雅地对数据进行分组?一些朋友可能会遇到这方面的问题,对此在下文小编向大家来讲解一下,内容详细,易于理解,希望大家阅读完这篇能有收获哦,有需要的朋友就往下看吧!
这篇文章我们来了解一下Python numpy中setdiff1d函数的相关内容,下文介绍了setdiff1d函数的功能、语法、以及使用示例。有需要的朋友可以参考了解看看,接下来就跟随小编一起学习一下吧!
今天教各位小伙伴怎么用Python处理excel,文中有非常详细的代码示例及相关知识总结,对正在学习python的小伙伴们很有帮助,需要的朋友可以参考下
开发程序其实就像预测天气一样,即使是代码的异常错误,也应该能预测且被控制,下面这篇文章主要给大家介绍了关于Python如何处理异常报错方法的相关资料,需要的朋友可以参考下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008