及时的打印日志和保存为日志文件,也是对写代码和进行调试非常重要的呢

源代码

from loguru import logger
import time
 #建立新的日志文件
log_name='main_log_{}.log'.format(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()).replace(':','-'))

logger.add(log_name,#自定义的文件名
           level='DEBUG', #ERROR>WARNING>INFO>DEBUG,
           rotation='500MB', #日志的创建时机,"500 MB" :当日志文件达到500MB时就会重新生成一个文件,"12:00" :每天12点就会创建新的文件、"1 week" :每隔一周创建一个log。
           encoding="utf-8",
           retention='1 week',# 日志保存的最长时间 "1 week, 3 days"、"2 months" 
           compression="zip", #日志保存的压缩格式 "zip、tar、gz、tar.gz"
           enqueue=True,#在多进程同时往日志文件写日志的时候使用队列达到异步功效
          ) 
#其实上面只需要logger.add(‘文件名’)就行了,其他都是定制功能,使用默认的就行
#然后就可以使用啦
logger.info("I am a info")
logger.debug("I am a debug")
logger.warning("I am a warning")
logger.error("I am a error")

1. 删除一个sink

logger.add()是增加了一个输出位置,也可以删除了这个向这个位置输出日志

trace = logger.add('runtime.log')
logger.debug('this is a debug message')
logger.remove(trace)

2. 跨文件输出日志

跨文件模块化是避免不了的,这个logger在跨文件的时候只需要from loguru import logger一下即可直接用。只在main文件里添加logger.add就行

3.捕捉错误

@logger.catch
def my_function(x, y, z):
    # An error? It's caught anyway!
    return 1 / (x + y + z)
my_function(0, 0, 0)

输出:

2020-11-20 15:34:22.153 | ERROR    | __main__:<module>:41 - An error has been caught in function '<module>', process 'MainProcess' (37432), thread 'MainThread' (32700):
Traceback (most recent call last):

> File "temp.py", line 41, in <module>
   my_function(0, 0, 0)
   └ <function my_function at 0x000002602F439550>

 File "F:\OneDrive - shanghaitech.edu.cn\_MINE_\code\temp\compute.py", line 9, in my_function
   res=x[0]
       └ 0

这个功能挺有用的,能把报错的位置,和每个变量的值标出来,太nb了。