loguru logger使用

一、基本使用

①标准使用

from loguru import logger

# 在标准输出里面输出一行debug日志
logger.debug("That's dubug")

②设置输出格式

from loguru import logger

logger.remove(0)  # 先删除格式
logger.add(sink='./logger.log', format="{time: %Y-%m-%d %H:%M:%S} | {level} | {message}")  # sink是log存放路径   {time}:时间戳    {level}:日志级   {message}:日志消息

logger.debug("That's dubug")

③日志输出文档完整配置

logger.add(
    sink="./logs/log.log",   # sink:为记录器生成的每条记录指定目的地。默认情况下,它设置为 sys.stderr
    level="INFO",     # 日志级别
    filter="my_module",   # 过滤条件
    format="{time: %Y-%m-%d %H:%M:%S} | {level} | {message}",  # 自定义输出格式
    enqueue=True,     # enqueue:启用此选项会将日志记录放入队列中,以避免多个进程记录到同一目的地时发生冲突
    rotation="4 weeks",     # 每4周生成一个日志文件
    retention="4 months",   # 日志文件保留四个月
    encoding="utf-8",
    backtrace=True,   # acktrace:确定异常跟踪是否应该延伸到捕获错误的点之外,以便于调试
    diagnose=True,   # diagnose:确定变量值是否应显示在异常跟踪中。您应该在生产环境中将其设置为 False 以避免泄露敏感信息
    compression="zip",   # 设置压缩格式
    serialize=True,    # serialize:如果设置为 True,则日志记录以 JSON 格式呈现
)

④日志分级别输出到不同的文件

logger.add("debug.log", level="DEBUG", filter=lambda record: record["level"].name == "DEBUG")
logger.add("info.log", level="INFO", filter=lambda record: record["level"].name == "INFO")
logger.add("warning.log", level="WARNING", filter=lambda record: record["level"].name == "WARNING")
logger.add("error.log", level="ERROR", filter=lambda record: record["level"].name == "ERROR")
logger.add("critical.log", level="CRITICAL", filter=lambda record: record["level"].name == "CRITICAL")

⑤多线程与多进程

from atexit import register
from loguru import logger
from threading import Thread
from multiprocessing import Process

def thread_1():
    for i in range(10):
        logger.info('线程1')
def thread_2():
    for i in range(10):
        logger.debug('线程2')

def process_1():
    logger.add(sink='./file/log/logger_多进程.txt')
    for i in range(10):
        logger.info('进程1')

def process_2():
    logger.add(sink='./file/log/logger_多进程.txt')
    for i in range(10):
        logger.debug('进程2')

"""
这个函数(装饰器的方式)会在python解释器中注册一个退出函数,也就是说,他会在脚本退出之前请求调用这个特殊函数
"""
@register
def over():
    logger.info('退出程序')

if __name__ == '__main__':
	# 多线程---主线程有一个add函数即可
    logger.add(sink='./file/log/logger_多线程.txt')
	t1 = Thread(target=thread_1)
    t2 = Thread(target=thread_2)

    t1.start()
    t2.start()

    t1.join()
    t2.join()


    # # 多进程---需要在各自的进程中有add函数
    # logger.add(sink='./file/log/logger_多进程.txt', enqueue=True)
    # p1 = Process(target=process_1)
    # p2 = Process(target=process_2)
    #
    # p1.start()
    # p2.start()

    # p1.join()
    # p2.join()
    
	# 进程池---也是一样的效果
    # import multiprocessing
    # pool = multiprocessing.Pool(processes=2)
    # pool.apply_async(process_1)
    # pool.apply_async(process_2)
    # pool.close()
    # pool.join()

参考:
https://www.cnblogs.com/CheeseZH/p/11992155.html
https://blog.csdn.net/bailang_zhizun/article/details/107863671
https://blog.csdn.net/lly1122334/article/details/107516039

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值