我写了这么多年的Python。我一直使用Python自带的logging模块来记录日志。每次需要写一些配置将日志输出到不同的位置,设置不同的日志输出格式,或者日志文件的划分和压缩等等。这个日志模块没有任何问题。直到无意中发现了一个神器,我才知道日志原来可以这么简单!这个神器就是loguru。安装这个库的安装方法很简单,直接使用pip就可以了,我用的是Python3版本,安装命令如下:pip3installloguru安装完成后我们就可以使用了,最简单的使用方法:fromloguruimportloggerlogger.debug('thisisadebugmessage')无需任何配置即可开箱即用。上面的例子是打印一条debug级别的日志,输出结果如下:2021-03-1622:17:23.640|调试|__main__::8-这是一条调试消息这个输出日志信息包含日期和时间、日志级别、日志代码行数和日志内容信息。可以说是包含了最基本的内容。当然也可以打印warning、info、error、critical、success等级别。输出的日志在控制台也有高亮颜色,每一层的日志颜色都不一样,简直不要太酷!日志文件是用loguru写的,输出日志文件只需要一个add()函数:logger.add('hello.log')logger.debug('iaminlogfile')此时,在控制台会正常打印日志信息,在同级目录下会生成一个日志文件hello.log。当我们打开日志文件时,我们可以看到如下内容:2021-03-1621:20:31.460|调试|__main__::12-我在日志文件中当然我们也可以在文件中添加一些参数来指定日志输出的格式和级别:log=logger.add('world.log',format="{time}|{level}|{message}",level="INFO")logger.debug('iamdebugmessage')logger.info('iaminfomessage')对应文件输出信息如下:2021-03-16T22:47:53.226998+0800|信息|iaminfomessage我们设置文件只记录info级别的信息,所以debug级别的日志信息不会写入日志文件。我们还可以在日志文件名中添加信息:logger.add('hello_{time}.log')上面的代码运行后,会生成一个带有时间的日志文件。停止写入文件当我们不再需要将日志写入文件时,我们可以随时停止:id=logger.add('world.log',format="{time}|{level}|{message}",level="INFO")logger.info('thisisainfomessage')logger.remove(id)logger.info('thisisanotherinfomessage')add()方法会返回一个日志文件id,当我们需要的时候停止写信息,我们使用remove()方法,传入id。上述代码运行后,日志文件中记录的信息如下:2021-03-16T22:47:53.227389+0800|信息|thisisainfomessage调用remove()方法后,下面的日志信息并没有写入日志文件中。滚动日志文件我们可以配置轮换参数来指定如何生成日志文件。和普通的日志记录一样,我们可以根据文件大小、时间、日期等设置生成策略#超过200M就生成一个新文件logger.add("size.log",rotation="200MB")#生成每天中午12点生成一个新文件logger.add("time.log",rotation="12:00")#每周生成一个新文件logger.add("size.log",rotation="1week")指定日志文件的有效期我们还可以通过retention参数来指定日志文件的保留期限:logger.add("file.log",retention="30days")通过上面的配置,可以指定日志文件最多保留30天,超过30天的日志文件将被清除。配置压缩文件为了节省空间,我们可能会有压缩日志文件的需要。这个loguru也可以这样实现:logger.add("file.log",compression="zip")通过上面的配置,我们指定日志文件的压缩格式为zip。异常捕获loguru不仅可以记录日志,还可以捕获异常信息,可以帮助我们更好的追溯错误原因。在loguru模块中,我们通常有两种异常捕获方式:通过catch装饰器捕获和通过exception方法捕获。catch装饰器捕获异常我们来看一个例子:@logger.catchdefa_function(x):return1/xa_function(0)输出信息如下:021-03-1623:10:28.124|错误|__main__::32-在函数''、进程'MainProcess'(25939)、线程'MainThread'(140735895298944)中发现错误:Traceback(最近一次调用最后一次):文件“/Users/cxhuan/Library/ApplicationSupport/JetBrains/IntelliJIdea2020.3/plugins/python/helpers/pydev/pydevconsole.py”,第483行,在pydevconsole.start_client(host,port)│││└62146││└'127.0.0.1'│└└文件"/Users/cxhuan/Documents/python_workspace/mypy/loguru/logurustudy.py”,第32行,在a_function(0)└File"/Users/cxhuan/Documents/python_workspace/mypy/loguru/logurustudy.py",line30,ina_functionreturn1/x└0ZeroDivisionError:divisionbyzero在上面的代码中,我特地创建了一个1除以0异常,我们可以看到日志输出信息非常详细,调用的每一步错误信息都被详细的列出来了,参数的值也被打印出来了,而且有一个很直观的方向,简直就是变态分析的神器!异常方法捕获异常,我们直接看例子:defb_function1(x):try:return1/xexceptZeroDivisionError:logger.exception("exception!!!")b_function1(0)运行上面的代码,并且输出信息如下:2021-03-1623:16:07.602|错误|__main__:b_function1:40-异常!!!回溯(最近调用最后):文件“/Users/cxhuan/Library/ApplicationSupport/JetBrains/IntelliJIdea2020.3/plugins/python/helpers/pydev/pydevconsole.py”,行483,在pydevconsole.start_client(host,port)│││└62254││└'127.0.0.1'│└└<模块'pydevconsole'来自'/Users/cxhuan/Library/ApplicationSupport/JetBrains/IntelliJIdea2020.3/plugins/python/helpers/py...文件“/Users/cxhuan/Library/ApplicationSupport/JetBrains/IntelliJIdea2020.3/plugins/python/helpers/pydev/pydevconsole.py",line411,instart_clientprocess_exec_queue(interpreter)│└<_pydev_bundle.pydev_ipython_console.InterpreterInterfaceobjectat0x118d36240>└b_function1(0)└>文件“/Users/cxhuan/Documents/python_workspace/mypy/loguru/logurustudy.py”,line38,inb_function1return1/x└0ZeroDivisionError:divisionbyzero同样,错误的细节也打印的非常详细直观。有需求就会有实现,但是需求可以这么优雅的实现,简洁,我只服从这个loguru的作者。以上就是本次分享的全部内容。想了解更多python知识,请前往公众号:Python编程学习圈,每日干货分享