python Log篇(Logging)

python Log篇(Logging)

文章目录

  • python Log篇(Logging)
    • 一、Logging环境
    • 二、我们先了解一下Logging都有哪些信息等级
    • 三、文件格式化,
      • a. StreamHandler
      • b. FileHandler
      • c. RotatingFileHandler
      • d. TimedRotatingFileHandler
    • 四、日志格式化,让我们显示我们想要显示的数据
    • 五、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")

如转载此文请联系我征得本人同意,并标注出处及本博主名,谢谢 !

你可能感兴趣的:(python,基础,python,php,开发语言)