Python程序运行日志
及时的打印日志和保存为日志文件,也是对写代码和进行调试非常重要的呢
源代码
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了。
对本文有任何问题,请在下面评论: