import logging
FORMAT = "%(asctime)s %(thread)d %(message)s"
logging.basicConfig(level=logging.INFO, format=FORMAT)
class TestSchedule():
def setup_class(self):
logging.info("清理测试数据--------删除所有闹钟")
def test_add_schedule(self):
logging.info("添加闹钟:响铃一次、循环闹钟")
def test_add_same_schedule(self):
logging.info("测试添加重复闹钟")
if __name__ == "__main__":
test = TestSchedule()
test.setup_class()
test.test_add_schedule()
test.test_add_same_schedule()

[python] Python日志记录库loguru使用指北
在loguru中,add函数用于添加日志处理器。这个函数用于指定日志消息应该被发送到何处,例如控制台、文件或其他自定义的目的地。add函数主要参数介绍如下:
sink: 定义日志消息的输出位置,可以是文件路径、标准输出(stdout)、标准错误(stderr,默认)或其他自定义的输出位置。
format: 指定日志消息的格式,可以是简单的字符串,也可以是格式化字符串,支持各种字段插值。
level: 设置处理程序处理的日志消息的最低级别。比如设置为DEBUG,则处理程序将处理所有级别的日志消息。
filter: 可选参数,用于添加过滤器,根据特定的条件过滤掉不需要的日志消息。
colorize: 布尔值,指定是否对日志消息进行着色处理,使日志在控制台中更易于区分。
serialize: 布尔值,指定是否对日志消息进行序列化处理,通常与enqueue=True一起使用,以确保多线程安全。
enqueue: 布尔值,指定是否将日志消息放入队列中处理,用于多线程应用中避免阻塞。
backtrace: 布尔值或字符串,指定是否记录回溯信息,默认为False。
diagnose: 布尔值,启用后,会在处理程序内部出现错误时记录诊断信息。
rotation: 日志文件轮换的配置,支持按大小或时间进行日志文件的轮换。
retention: 用于设置日志文件的保留时间。
compression: 布尔值,指定是否对轮换后的日志文件进行压缩处理。
from loguru import logger
logger.debug("这是一条调试消息")
logger.info("这是一条信息消息")
logger.success("这是一条成功消息")
logger.warning("这是一条警告消息")
logger.error("这是一条错误消息")
logger.critical("这是一条关键错误消息")

设置输出到文件
from loguru import logger
logger.add("file.log")
logger.info("这条消息将会记录到文件中")


设置输出到文件,格式化
from loguru import logger
logger.add("file.log", format="{time} {level} {message}")
logger.info("这是一条格式化的日志消息")

按大小、时间进行日志文件的轮换
from loguru import logger
# 设置日志输出格式
logger.add('file.log', rotation='100 MB', format='{time} - {level} - {message}')
# 记录日志信息
logger.debug('Debug message')
logger.info('Info message')
logger.warning('Warning message')
logger.error('Error message')
logger.critical('Critical message')


logger.add("file_1.log", rotation="100 MB")
# 每天中午12时创建新的日志文件,旧文件保留并重命名
logger.add("file_2.log", rotation="12:00")
# 当日志文件存在超过一周时创建新的日志文件,旧文件保留并重命名
logger.add("file_3.log", rotation="1 week")
# 设置日志文件保留10天
logger.add("file_4.log", retention="10 days")
# 当文件大小达到100MB时创建新的日志文件,旧文件保留压缩为zip文件
logger.add('file_{time}.log', rotation="100 MB", compression='zip')
日志的过滤
from loguru import logger
logger.add("file.log", filter=lambda record: record["level"].name == "INFO")
logger.debug("这条消息不会被记录")
logger.info("这条消息会被记录")
logger.warning("这条消息也不会被记录")


from loguru import logger
# 定义一个过滤器函数
defmy_filter(record):
# 只记录包含 "第一" 的日志
return"第一"in record["message"]
# 使用过滤器
logger.add("myapp.log",filter=my_filter)
# 记录一些日志
logger.info("第一个记录")
logger.info("第二个记录")

from loguru import logger
import sys
# 终端显示不受该段代码设置
# 添加一个日志处理器,输出到文件
# 设置日志最低显示级别为INFO,format将设置sink中的内容
# sink链接的本地文件,如不存在则新建。如果存在则追写
logger.add(sink="myapp.log", level="INFO", format="{time:HH:mm:ss} | {message}| {level}")
# debug结果不被显示到本地文件
logger.debug("这是一条调试信息")
logger.info("这是一条普通信息")


logger.remove()之后的所有日志将不会被记录
from loguru import logger
# 移除所有日志处理器(包括终端输出)
logger.remove()
# 没有输出
logger.info("这是一条普通信息存入myapp3")

输出屏幕的过滤
from loguru import logger
import sys
logger.remove()# 移除默认输出
# 添加一个日志处理器,输出到控制台,使用自定义格式
logger.add(
sink=sys.stdout,
level="INFO",
# green表示颜色
format="<green>{time:HH:mm}</green> {level} <level>{message}</level>"
)
# 注意终端显示会同步显示
logger.debug("这是一条调试信息")
logger.info("这是一条普通信息")

异常捕获
from loguru import logger
logger.add(sink='myapp.log')
@logger.catch
def my_function(x, y):
return x / y
res = my_function(0,0)

结合bind方法进行过滤,bind方法用于向日志记录器添加额外的上下文信息。这些信息将被包含在每条日志消息中,但不会改变日志消息本身
from loguru import logger
def filter_user(record):
return record["extra"].get("user") =="A"
logger.add("myapp.log", filter=filter_user)
# 绑定user
logger.bind(user="A").info("来自A")
logger.bind(user="B").info("来自B")

4341

被折叠的 条评论
为什么被折叠?



