作者:小张学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!的更多相关文章

  1. Python分词模块推荐:jieba中文分词

    一.结巴中文分词采用的算法 基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG)采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合对于未登录词,采 ...

  2. python模块 - 常用模块推荐

    http://blog.csdn.net/pipisorry/article/details/47185795 python常用模块 压缩字符 当谈起压缩时我们通常想到文件,比如ZIP结构.在Pyth ...

  3. Day05 - Python 常用模块

    1. 模块简介 模块就是一个保存了 Python 代码的文件.模块能定义函数,类和变量.模块里也能包含可执行的代码. 模块也是 Python 对象,具有随机的名字属性用来绑定或引用. 下例是个简单的模 ...

  4. python基础-模块

    一.模块介绍                                                                                              ...

  5. Python Paramiko模块与MySQL数据库操作

    Paramiko模块批量管理:通过调用ssh协议进行远程机器的批量命令执行. 要使用paramiko模块那就必须先安装这个第三方模块,仅需要在本地上安装相应的软件(python以及PyCrypto), ...

  6. python 常用模块(转载)

    转载地址:http://codeweblog.com/python-%e5%b8%b8%e7%94%a8%e6%a8%a1%e5%9d%97/ adodb:我们领导推荐的数据库连接组件bsddb3:B ...

  7. python 各模块

    01 关于本书 02 代码约定 03 关于例子 04 如何联系我们 1 核心模块 11 介绍 111 内建函数和异常 112 操作系统接口模块 113 类型支持模块 114 正则表达式 115 语言支 ...

  8. 如何制作python安装模块(setup.py)

    Python模块的安装方法: 1. 单文件模块:直接把文件拷贝到$python_dir/lib 2. 多文件模块,带setup.py:python setup.py install 3. egg文件, ...

  9. Python 日志模块实例

    python 打印对象的所有属性值: def prn_obj(obj):     print '\n'.join(['%s:%s' % item for item in obj.__dict__.it ...

随机推荐

  1. TCL(事务控制语言)

    #TCL/*Transaction Control Language 事务控制语言 事务:一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行. 案例:转账 张三丰 1000 ...

  2. pypcap rpm制作

    1.下载地址 https://pypi.org/project/pypcap/#history 2.下载后,解压并制作rpm tar -xvf pypcap-1.2.3.tar.gz python s ...

  3. golang 创建 tun 设备

    源码: package main import ( "flag" "fmt" "github.com/pkg/errors" "n ...

  4. Python开发的入门教程(四)-dict

    介绍 本文主要介绍Python中dict的基本知识和使用. Python之什么是dict 我们已经知道,list 和 tuple 可以用来表示顺序集合,例如,班里同学的名字: ['Adam', 'Li ...

  5. in文件注意事项及详细解释(转载)

    转载自:https://www.cnblogs.com/sysu/p/10817315.html  和   https://www.cnblogs.com/panscience/p/4953940.h ...

  6. Linux 部署java web 项目,验证码图片不显示文字问题

    系统上线后,在获取验证码接口时,获取的验证码图片上没有对应的验证码数字,经过验证后,是由于Linux缺少字体造成的. 正常我们也可以将window的字体直接上传到linux服务器上,window的字体 ...

  7. Java面试题(Spring Boot/Spring Cloud篇)

    Spring Boot/Spring Cloud 104.什么是 spring boot? SpringBoot是一个框架,一种全新的编程规范,他的产生简化了框架的使用,所谓简化是指简化了Spring ...

  8. 分享一个FileUtil工具类,基本满足web开发中的文件上传,单个文件下载,多个文件下载的需求

    获取该FileUtil工具类具体演示,公众号内回复fileutil20200501即可. package com.example.demo.util; import javax.servlet.htt ...

  9. 【Android】Android开发可以手动进行控制的跑马灯效果,包括从左到右,以及从右到左,

    作者:程序员小冰,GitHub主页:https://github.com/QQ986945193 新浪微博:http://weibo.com/mcxiaobing 首先给大家看一下我们今天这个最终实现 ...

  10. UniRapidJson

    https://github.com/takezoh/UniRapidJson 如何编译安卓 cd ~/UniRapidJson/build/android make 生成的so可以在 /Users/ ...