python Log篇(Logging)
文章目录
一、Logging环境
python 中Logging库是标准库,不需要安装哦,哈哈哈,不过要保证Python版本3.2以上哦,直接用起来吧
二、我们先了解一下Logging都有哪些信息等级
日志等级(level) | 描述 |
---|---|
DEBUG | 全部的日志详细,比如用于问题诊断 |
INFO | 正常信息,比如预设预期结果的确认 |
WARNING | 警告信息,比如电脑内存不足 |
ERROR | 错误信息,比如配置日志记录系统时出现错误 |
CRITICAL | 严重的错误信息,比如系统奔溃的错误信息 |
日志内容(level) | 描述 |
---|---|
debug | 不设置权限 |
info | 打印 info, warning, error, critical 级别的日志 |
warning | 打印 warning, error, critical 级别的日志 |
error | 打印 error, critical 级别的日志 |
critical | 打印 critical 级别 |
等级越高,内容就越少
日志级别等级排序: critical > error > warning > info > debug
三、文件格式化,
Handler(处理器)是用来指定日志消息该如何处理的组件。它负责接收Logger对象传递过来的日志消息,并将其输出到特定的目标,例如文件、控制台、网络等。
常见的Handler处理器:
StreamHandler
: 从 Handler 继承而来,将日志消息从控制台输出到流对象
FileHandler
:从 StreamHandler 继承而来,将日志消息写入到指定文件中。
RotatingFileHandler
: 从 FileHandler 继承而来,当日志文件达到一定大小后,会自动切割日志文件,生成新的日志文件。
TimedRotatingFileHandler
:从 FileHandler 继承而来,按照时间周期来切割日志文件,例如每天生成一个新的日志文件。
SocketHandler:从 Handler 继承而来,通过网络将日志消息发送到远程服务器。
SMTPHandler:从 Handler 继承而来,通过邮件将日志消息发送给指定的收件人。
a. StreamHandler
日志文件的路径和名称。如果不设置此参数,将默认输出到控制台。
SH = logging.StreamHandler()
b. FileHandler
filename:日志文件的路径和名称。如果不设置此参数,将默认输出到控制台。
FH = FileHandler(filename="app.log")
c. RotatingFileHandler
filename:日志文件的路径和名称。如果不设置此参数,将默认输出到控制台。
maxBytes:文件大小,以字节设置,1024字节=1Kb,10241024=1Mb,10241024*100=100Mb
backupCount:保留的日志文件个数,超过设置熟练,会自动替换最开始的文件
FH = logging.handlers.RotatingFileHandler(filename="app.log", maxBytes=1024, backupCount=5)
d. TimedRotatingFileHandler
filename:日志文件的路径和名称。如果不设置此参数,将默认输出到控制台。
when:时间间隔,“S”(秒),“M”(分钟),“H”(小时),“D”(天),“W0”-“W6”(周一到周日),“midnight”(每天凌晨)。
interval:切割时间间隔的数量。
backupCount:保留的日志文件个数。
FH = TimedRotatingFileHandler(filename="app.log", when="D", interval=1, backupCount=7)
四、日志格式化,让我们显示我们想要显示的数据
Formatter(日志格式)用于定义日志消息的输出格式。在Python的logging模块中,我们可以通过设置Formatter来自定义日志消息的格式,包括日期、时间、级别、消息内容等。
格式 | 描述 |
---|---|
%(name)s | Logger的名字 |
%(levelno)s | 数字形式的日志级别 |
%(levelname)s | 文本形式的日志级别 |
%(pathname)s | 调用日志输出函数的模块的完整路径名,可能没有 |
%(filename)s | 调用日志输出函数的模块的文件名 |
%(module)s | 调用日志输出函数的模块名 |
%(funcName)s | 调用日志输出函数的函数名 |
%(lineno)d | 调用日志输出函数的语句所在的代码行 |
%(created)f | 当前时间,用UNIX标准的表示时间的浮 点数表示 |
%(relativeCreated)d | 输出日志信息时的,自Logger创建以 来的毫秒数 |
%(asctime)s | 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒 |
%(thread)d | 线程ID |
%(threadName)s | 线程名 |
%(process)d | 进程ID |
%(message)s | 用户输出的消息 |
五、Logging 示例
请不要实例化Logging日志的输出,不然可能会出现双重的log等情况,
import logging
import logging.handlers
def AddLog(msg):
# 创建Logger对象
logger = logging.getLogger("My_logger")
# 设置日志等级
logger .setLevel(logging.DEBUG)
# 创建一个控制台处理器
SH = logging.StreamHandler()
# 创建一个文件处理器
# 将日志信息输出到`app.log`中,设置每个文件大小最大为1024字节也就是1kb,设置, 最多保留5个备份文件
FH = logging.handlers.RotatingFileHandler("app.log", maxBytes=1024, backupCount=5)
# Formatter日志格式化
formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(module)s - %(message)s")
SH.setFormatter(formatter)
FH.setFormatter(formatter)
# 将处理器添加到Logger对象中
logger.addHandler(SH)
logger.addHandler(FH)
# 记录一条调试信息
logger.debug("This is a DEBUG message")
# 记录一条一般信息(一般使用这个就行)
logger.info("This is a info message")
logger.info(msg)
# 记录一条警告信息
logger.warning("This is a warning message")
# 记录一条错误信息
logger.error("This is a error message")
logger.removeHandler(SH)
logger.removeHandler(FH)
AddLog("Add info message")
如转载此文请联系我征得本人同意,并标注出处及本博主名,谢谢 !