一、基本使用
①标准使用
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