python打印日志文件,python logging默认情况下打印
Python标准库自带日志模块,涉及四个核心组件。这些组件构建了日志系统。下面这篇文章主要介绍Python的日志打印方法的使用教程,有需要的朋友可以参考一下。
00-1010 1.必备技能1。使用测井模块2。日志1。日志记录的基本使用1.1。五个日志级别(调试/信息/警告/错误/严重)1.2。打印不同日志级别的方法:2 .自定义日志收集器2.1。创建日志收集器摘要。
目录
一、必备技能
(1)5个日志等级/以及5个输出日志的内置函数
(2)日志收集器、日志输出渠道的概念
(3)如何自定义日志收集器
(4)如何封装自定义的日志收集器
1、logging模块的使用
Python的官方库,用于打印日志,无需安装,使用时可以直接调用。
二、logging
1、logging的基本使用
(1)调试:调试模式下的日志,仅用于程序员。
(2)INFO:程序正常运行时的日志输出。
(3)WARN/WARNING:警告信息,当前程序仍然可以运行,以后可能会出现问题。
(4)错误:程序执行过程中的总错误信息。
(5)CRITICAL:发生严重错误,阻塞进程,程序可能无法继续运行。
1.1、日志的五个等级(DEBUG/INFO/WARNING/ERROR/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 (level) # Level必须大写
logging . basic config(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级别的日志
2、自定义日志收集器
2.1、创建日志收集器
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,osfrom 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 loggingfrom 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--------")
输出结果:
总结
到此这篇关于python打印日志方法使用的文章就介绍到这了,更多相关python打印日志方法内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。