Python记录日志模块推荐-loguru!
作者:小张学Python
本文链接: https://mp.weixin.qq.com/s/dkNkEohPl6H2VopUrpxxZg
转载请注明来源!!
前言
在做项目的时候一直在用Python自带的模块logging,进行日志的记录,虽然他们满足我大部分的要求,但是还是有很多缺点,例如需要额外的配置、不能自动删除时间久的日志文件等等。

难道真的没有比较好的第三方模块吗。。。。。于是我在网上langlanglang.....咦?还真到了一个比较好的模块来记录日志。他就是今天我们的主角---loguru!!
一、安装loguru
pip install loguru
二、基本使用
from loguru import loggerlogger.debug('this is a debug message')
运行结果如下:

从结果可以得知,不需要配置什么东西,然后调用其 debug方法即可。在 loguru 里面有且仅有一个主要对象,那就是 logger.loguru 里面有且仅有一个 logger,而且它已经被提前配置了一些基础信息,比如比较友好的格式化、文本颜色信息等等。
三、详细使用
既然是日志,那么最常见的就是输出到文件了。loguru 对输出到文件的配置有非常强大的支持,比如支持输出到多个文件,分级别分别输出,过大创建新文件,过久自动删除等等。下面我们分别看看这些怎样来实现,这里基本上就是 add 方法的使用介绍。
1.输出日志到文件,记录日志的等级,编码格式
import os
from loguru import logger
# logger.debug('this is a debug message')
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
# 日志文件配置
LOG_DIR = os.path.join(BASE_DIR,'log')
if os.path.exists(LOG_DIR) is False:
os.makedirs(LOG_DIR)
logger.add(os.path.join(LOG_DIR,'error.log'),encoding='utf-8',level="INFO")
2.rotation 配置
用了 loguru 我们还可以非常方便地使用rotation 配置,比如我们想一天输出一个日志文件,或者文件太大了自动分隔日志文件,我们可以直接使用 add 方法的 rotation 参数进行配置
#输出到文件"error2020-09-21_16-08-52_714738.log",
logger.add(os.path.join(LOG_DIR,'error{time}.log'),rotation="500 MB",level="WARNING",encoding='utf-8')
通过这样的配置我们就可以实现每 500MB 存储一个文件,每个 log 文件过大就会新创建一个 log 文件。
我们在配置 log 名字时加上了一个 time 占位符,这样在生成时可以自动将时间替换进去,生成一个文件名包含时间的 log 文件。
另外我们也可以使用 rotation 参数实现定时创建 log 文件,例如:
logger.add('runtime_{time}.log', rotation='00:00') #实现每天 0 点新创建一个 log 文件输出了。
另外我们也可以配置 log 文件的循环时间,比如每隔一周创建一个 log 文件,写法如下:
logger.add(os.path.join(LOG_DIR,'error.log'),rotation='1 week',encoding='utf-8') #实现 1 day 1 week 1 hour 即多久生成一个新的文件
3.retention 配置
很多情况下,一些非常久远的 log 对我们来说并没有什么用处了,它白白占据了一些存储空间,不清除掉就会非常浪费。retention 这个参数可以配置日志的最长保留时间。
logger.add(os.path.join(LOG_DIR,'error.log'),rotation='1 day',retention='30 days',encoding='utf-8')
这样log 文件里面就会保留最新 30 天的, log会自动清理一个月之前的日志
4.compression 配置
loguru 还可以配置文件的压缩格式,这样可以更加节省存储空间,比如使用 zip 文件格式保存,示例如下:
logger.add(os.path.join(LOG_DIR,'error.log'),rotation='1 day', compression='zip',retention='30 days',encoding='utf-8')
5.enqueue配置
loguru可以配置在多进程同时往日志文件写日志的时候使用队列达到异步功效。
logger.add(os.path.join(LOG_DIR,'error.log'), enqueue=True) # 异步写入
6.Traceback 记录
在很多情况下,如果遇到运行错误,而我们在打印输出 log 的时候万一不小心没有配置好 Traceback 的输出,很有可能我们就没法追踪错误所在了。
但用了 loguru 之后,我们用它提供的装饰器就可以直接进行 Traceback 的记录,例如:
import os
from loguru import logger
# logger.debug('this is a debug message') BASE_DIR = os.path.dirname(os.path.abspath(__file__))
# 日志文件配置
LOG_DIR = os.path.join(BASE_DIR,'log') if os.path.exists(LOG_DIR) is False:
os.makedirs(LOG_DIR)
logger.add(os.path.join(LOG_DIR,'error.log'),rotation='1 day',retention='30 days',encoding='utf-8',level="INFO")
@logger.catch
def func():
print(a) func()
logger.warning("程序走到这里了")
error.log日志文件如下:
2020-09-24 16:50:58.398 | ERROR | __main__:<module>:17 - An error has been caught in function '<module>', process 'MainProcess' (42920), thread 'MainThread' (42252):
Traceback (most recent call last):
> File "D:/project/loguru_demo.py", line 17, in <module>
func()
└ <function func at 0x00000261BF734268>
File "D:/project/loguru_demo.py", line 15, in func
print(a)
NameError: name 'a' is not defined
2020-09-24 16:50:58.792 | WARNING | __main__:<module>:18 - 程序走到这里了
很明显,程序的报错位置追踪到了,也没有影响程序接下来的正常运行。
四、结语
到这之后呢,已将loguru记录日志的方法已经基本介绍完毕,具体详细的课查看官方网站==>>官方文档:
创作不易,期待你的打赏!!

Python记录日志模块推荐-loguru!的更多相关文章
- Python分词模块推荐:jieba中文分词
一.结巴中文分词采用的算法 基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG)采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合对于未登录词,采 ...
- python模块 - 常用模块推荐
http://blog.csdn.net/pipisorry/article/details/47185795 python常用模块 压缩字符 当谈起压缩时我们通常想到文件,比如ZIP结构.在Pyth ...
- Day05 - Python 常用模块
1. 模块简介 模块就是一个保存了 Python 代码的文件.模块能定义函数,类和变量.模块里也能包含可执行的代码. 模块也是 Python 对象,具有随机的名字属性用来绑定或引用. 下例是个简单的模 ...
- python基础-模块
一.模块介绍 ...
- Python Paramiko模块与MySQL数据库操作
Paramiko模块批量管理:通过调用ssh协议进行远程机器的批量命令执行. 要使用paramiko模块那就必须先安装这个第三方模块,仅需要在本地上安装相应的软件(python以及PyCrypto), ...
- python 常用模块(转载)
转载地址:http://codeweblog.com/python-%e5%b8%b8%e7%94%a8%e6%a8%a1%e5%9d%97/ adodb:我们领导推荐的数据库连接组件bsddb3:B ...
- python 各模块
01 关于本书 02 代码约定 03 关于例子 04 如何联系我们 1 核心模块 11 介绍 111 内建函数和异常 112 操作系统接口模块 113 类型支持模块 114 正则表达式 115 语言支 ...
- 如何制作python安装模块(setup.py)
Python模块的安装方法: 1. 单文件模块:直接把文件拷贝到$python_dir/lib 2. 多文件模块,带setup.py:python setup.py install 3. egg文件, ...
- Python 日志模块实例
python 打印对象的所有属性值: def prn_obj(obj): print '\n'.join(['%s:%s' % item for item in obj.__dict__.it ...
随机推荐
- TCP协议中的三次握手和四次挥手(图解)-转
转自:http://blog.csdn.net/whuslei/article/details/6667471/ 建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来看 ...
- Spring Security自定义认证页面(动态网页解决方案+静态网页解决方案)--练气中期圆满
写在前面 上一回我们简单分析了spring security拦截器链的加载流程,我们还有一些简单的问题没有解决.如何自定义登录页面?如何通过数据库获取用户权限信息? 今天主要解决如何配置自定义认证页面 ...
- 第七天Scrum冲刺博客
1.会议照片 2.项目进展 团队成员 昨日计划任务 今日计划任务 梁天龙 学习课程页面 建议页面 黄岳康 定义个人课程 登陆页面 吴哲翰 完成页面的与后端的沟通交流 继续保持确认功能齐全 ...
- SPSSAU数据分析思维培养系列4:数据可视化篇
本文章为SPSSAU数据分析思维培养的第4期文章. 前3期内容分别讲述数据思维,分析方法和分析思路.本文讲述如何快速使用SPSSAU进行高质量作图,以及如何选择使用正确的图形. 本文分别从五个角度进行 ...
- 招新裁老,两面派互联网大厂,培训三个月,就拿15K,凭什么?
看到一位朋友在发帖子求问:亲身经历,(如有谎言我名字倒过来写)一个大学同学18年毕业的.在兰州一个二本学的兽医农牧,毕业难找工作,去深圳一个机构培训了三个月吧,然后就去做大数据 算法了,然后又去做ja ...
- 用maven整合SSM中jsp运行报404和500问题解决方案
如果代码检查没有错误,建议更改maven版本,可以改为maven-3.6.1 网址:https://archive.apache.org/dist/maven/maven-3/ 选择3.6.1 再点击 ...
- JDK16关于TCP和UDP的优化
文章转自belaban.blogspot.com Double your performance: virtual threads (fibers) and JDK 15/16!If you use ...
- package_ios
PlistBuddy简单使用 https://www.jianshu.com/p/2167f755c47e xcodebuild 命令 https://www.jianshu.com/p/c32263 ...
- android studio配置so和assets目录
so配置: 1. 建立src/main/libs/armeabi目录,so文件放入armeabi目录 2.配置build.gradle android { defaultConfig{ XXXXXX ...
- org.xml.sax.SAXParseException: The processing instruction target matching "[xX][mM][lL]" is not allowed(转)
xml文件不能被正确解析/The processing instruction target matching "[xX][mM][lL]" is not allowed. The ...