logging基本使用

很多的小伙伴在平时写代码的时候,基本上使用的都是使用print()函数来进行一些日志的打印,使用print()来进行一些代码的调试,在较小的程序中这样做是可以的。但是在实际的工程项目中,我们需要保存程序运行的日志,以排查程序在某一个时候崩溃的具体原因,以便及时定位Bug进行抢救,而在Python中,logging就可以十分灵活的帮助我们记录程序运行的过程的中的一些信息。

第一个示例:

import logging

logging.debug("This is a debug log.")
logging.info("This is a info log.")
logging.warning("This is a warning log.")
logging.error("This is a error log.")
logging.critical("This is a critical log.")

在这里插入图片描述
会发现debug,info不会输出,这是因为logging模块提供的日志记录函数所使用的日志器设置的日志级别是WARNING,因此只有WARNING级别的日志记录以及大于它的ERROR和CRITICAL级别的日志记录被输出了,而小于它的DEBUG和INFO级别的日志记录被丢弃了。

解决方法:

import logging

logging.basicConfig(level=logging.DEBUG)
logging.debug("This is a debug log.")
logging.info("This is a info log.")
logging.warning("This is a warning log.")
logging.error("This is a error log.")
logging.critical("This is a critical log.")

在这里插入图片描述

logging.basicConfig设置参数level的显示级别为dubug。
这里用到了函数logging.basicConfig,下面具体介绍一下该函数使用:

logging.basicConfig(filename=”config.levellog”,filemode=”w”,format=%(asctime)s-%(name)s-%(levelname)s-%(message)s”,level=logging.INFO)

filename:指定日志输出目标文件的文件名,指定该设置项后日志信心就不会被输出到控制台了
filemode:如果指定 filename,则以此模式打开文件(‘r’、‘w’、‘a’)。默认为“a”。
format:指定输出的个数和内容
datefmt 指定日期/时间格式。需要注意的是,该选项要在format中包含时间字段%(asctime)s时才有效
level:设置日志等级。默认是logging.warning

其中format使用如下:

字段/属性名称使用格式描述
asctime%(asctime)s日志事件发生的时间–人类可读时间,如:2022-07-26 17:22:31,655
created%(created)f日志事件发生的时间–时间戳,就是当时调用time.time()函数返回的值
relativeCreated%(relativeCreated)d日志事件发生的时间相对于logging模块加载时间的相对毫秒数(目前还不知道干嘛用的)
msecs%(msecs)d日志事件发生事件的毫秒部分
levelname%(levelname)s该日志记录的文字形式的日志级别(‘DEBUG’, ‘INFO’, ‘WARNING’, ‘ERROR’, ‘CRITICAL’)
levelno%(levelno)s该日志记录的数字形式的日志级别(10, 20, 30, 40, 50)
name%(name)s所使用的日志器名称,默认是’root’,因为默认使用的是 rootLogger
message%(message)s日志记录的文本内容,通过 msg % args计算得到的
pathname%(pathname)s调用日志记录函数的源码文件的全路径
filename%(filename)spathname的文件名部分,包含文件后缀
module%(module)sfilename的名称部分,不包含后缀
lineno%(lineno)d调用日志记录函数的源代码所在的行号
funcName%(funcName)s调用日志记录函数的函数名
process%(process)d进程ID
processName%(processName)s进程名称
thread%(thread)d线程ID
threadName%(thread)s线程名称

举个栗子:

import logging

FORMAT = "%(asctime)s - %(levelname)s - %(message)s - %(msecs)d ms "
logging.basicConfig(level=logging.DEBUG, format=FORMAT)
logging.debug("This is a debug log.")
logging.info("This is a info log.")
logging.warning("This is a warning log.")
logging.error("This is a error log.")
logging.critical("This is a critical log.")

在这里插入图片描述

import logging

FORMAT = "%(asctime)s - %(levelname)s - %(message)s - %(msecs)d ms "
logging.basicConfig(level=logging.DEBUG, format=FORMAT, datefmt='%a %d %b %Y %H:%M:%S', )
logging.debug("This is a debug log.")
logging.info("This is a info log.")
logging.warning("This is a warning log.")
logging.error("This is a error log.")
logging.critical("This is a critical log.")

在这里插入图片描述

保存到文件内:

import logging

FORMAT = "%(asctime)s - %(levelname)s - %(message)s - %(msecs)d ms "
logging.basicConfig(level=logging.DEBUG, format=FORMAT, datefmt='%a %d %b %Y %H:%M:%S', filename='my.log',
                    filemode='w')
logging.debug("This is a debug log.")
logging.info("This is a info log.")
logging.warning("This is a warning log.")
logging.error("This is a error log.")
logging.critical("This is a critical log.")

会生成一个文件:
在这里插入图片描述
文件内容如下:
在这里插入图片描述
上面的例子中日志输出都是英文内容,发现不了将日志输出到文件中会有中文乱码的问题,解决中文乱码,需要将文件编码设置为 “utf-8”:

FORMAT = "%(asctime)s - %(levelname)s - %(message)s - %(msecs)d ms "
handlers = [logging.FileHandler("test.log", encoding="utf-8")]
logging.basicConfig(level=logging.DEBUG, format=FORMAT, datefmt='%a %d %b %Y %H:%M:%S', handlers=handlers)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

<编程路上>

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值