控制台模块python_Python模块 > logging模块基础入门

本文介绍了Python中的logging模块,包括日志级别如DEBUG、INFO、WARNING、ERROR和CRITICAL的使用,以及如何自定义日志格式和输出到文件或控制台。通过实例展示了如何配置日志处理器,便于跟踪系统状态,定位问题和优化性能。
摘要由CSDN通过智能技术生成

前言:

日志用来记录用户操作、系统运行状态等,是一个系统的重要组成部分。

日志简介

好的日志

了解线上系统的运行状态

快速准确定位线上问题

发现系统瓶颈

预警系统潜在风险

挖掘产品最大价值

坏的日志

对系统的运行状态一知半解,甚至一无所知

系统出现问题无法定位,或者需要花费巨大的时间和精力

无法发现系统瓶颈,不知优化从何做起

无法基于日志对系统运行过程中的错误和潜在风险进行监控和报警

对挖掘用户行为和提升产品价值毫无帮助

python日志级别

DEBUG

调试信息

INFO

有用的信息

WARNING

警告信息 (默认日志级别)

ERROR

错误信息

CRITICAL

严重错误信息

NOTSET

非级别,表示不设置,按照父logger级别来过滤日志

日志级别关系

NOTSET < DEBUG < INFO < WARNING < ERROR < CRITICAL

备注:如果把log的级别设置为INFO, 那么小于INFO级别的日志都不输出, 大于等于INFO级别的日志都输出。也就是说,日志级别越高,打印的日志越不详细。

logging实战

logging模块基础代码

importlogging

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]-----Process finished with exit code 0

自定义日志级别

logging.basicConfig(level=logging.DEBUG)

importlogging

logging.basicConfig(level=logging.DEBUG)

logging.debug('-----调试信息[debug]-----')

logging.info('-----有用的信息[info]-----')

logging.warning('-----警告信息[warning]-----')

logging.error('-----错误信息[error]-----')

logging.critical('-----严重错误信息[critical]-----')

自定义日志显示格式

logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')

importlogging

logging.basicConfig(level=logging.DEBUG,

format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')

logging.debug('-----调试信息[debug]-----')

logging.info('-----有用的信息[info]-----')

logging.warning('-----警告信息[warning]-----')

logging.error('-----错误信息[error]-----')

logging.critical('-----严重错误信息[critical]-----')

format是控制日志格式用的,具体格式包含:

%(levelno)s

打印日志级别的数值

%(levelname)s

打印日志级别名称

%(pathname)s

打印当前执行程序的路径,其实就是sys.argv[0]

%(filename)s

打印当前执行程序名

%(funcName)s

打印日志的当前函数

%(lineno)d

打印日志的当前行号

%(asctime)s

打印日志的时间

%(thread)d

打印线程ID

%(threadName)s

打印线程名称

%(process)d

打印进程ID

%(message)s

打印日志信息

日志输入-文件

importloggingimportos.pathimporttime#第一步: 创建一个logger

logger =logging.getLogger()

logger.setLevel(logging.DEBUG)#设置Log等级

#第二步: 创建一个handler, 用于写入日志文件

rq = time.strftime('%Y%m%d', time.localtime(time.time()))

log_path= os.path.dirname(os.getcwd()) + r'/Logs/'log_name= log_path + rq + '.log'log_file=log_name

fh= logging.FileHandler(log_file, mode='a+')

fh.setLevel(logging.DEBUG)#输入到文件中的bug等级设置

#第三步: 定义handler的输出格式

formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")

fh.setFormatter(formatter)#第四步: 将logger添加到handler里面

logger.addHandler(fh)#日志

logger.debug('-----调试信息[debug]-----')

logger.info('-----有用的信息[info]-----')

logger.warning('-----警告信息[warning]-----')

logger.error('-----错误信息[error]-----')

logger.critical('-----严重错误信息[critical]-----')

日志输出-控制台

importloggingimportos.pathimporttime#第一步: 创建一个logger

logger =logging.getLogger()

logger.setLevel(logging.DEBUG)#设置Log等级

#第二步: 创建一个handler, 用于写入日志文件

rq = time.strftime('%Y%m%d', time.localtime(time.time()))

log_path= os.path.dirname(os.getcwd()) + r'/Logs/'log_name= log_path + rq + '.log'log_file=log_name

fh= logging.FileHandler(log_file, mode='a+')

fh.setLevel(logging.DEBUG)#输入到文件中的bug等级设置

#用于打印日志至控制台

ch =logging.StreamHandler()

ch.setLevel(logging.WARNING)#第三步: 定义handler的输出格式

formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")

fh.setFormatter(formatter)

ch.setFormatter(formatter)#第四步: 将logger添加到handler里面

logger.addHandler(fh)#用于打印日志至控制台

logger.addHandler(ch)#日志

logger.debug('-----调试信息[debug]-----')

logger.info('-----有用的信息[info]-----')

logger.warning('-----警告信息[warning]-----')

logger.error('-----错误信息[error]-----')

logger.critical('-----严重错误信息[critical]-----')

将错误日志记录至文本

importloggingimportos.pathimporttime#第一步: 创建一个logger

logger =logging.getLogger()

logger.setLevel(logging.DEBUG)#设置Log等级

#第二步: 创建一个handler, 用于写入日志文件

rq = time.strftime('%Y%m%d', time.localtime(time.time()))

log_path= os.path.dirname(os.getcwd()) + r'/Logs/'log_name= log_path + rq + '.log'log_file=log_name

fh= logging.FileHandler(log_file, mode='a+')

fh.setLevel(logging.DEBUG)#输入到文件中的bug等级设置

#用于打印日志至控制台

ch =logging.StreamHandler()

ch.setLevel(logging.WARNING)#第三步: 定义handler的输出格式

formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")

fh.setFormatter(formatter)

ch.setFormatter(formatter)#第四步: 将logger添加到handler里面

logger.addHandler(fh)#用于打印日志至控制台

logger.addHandler(ch)try:

open('/path/to/does/not/exist', 'rb')except(SystemExit, KeyboardInterrupt):raise

exceptException as e:

logger.error('Failed to open file', exc_info=True)

备注

该博客内容来自:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值