返回顶部
首页 > 资讯 > 后端开发 > Python >Python中loguru日志库如何使用
  • 697
分享到

Python中loguru日志库如何使用

2023-07-05 17:07:42 697人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要介绍“python中loguru日志库如何使用”,在日常操作中,相信很多人在Python中loguru日志库如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python中loguru日志库如

这篇文章主要介绍“python中loguru日志库如何使用”,在日常操作中,相信很多人在Python中loguru日志库如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python中loguru日志库如何使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

1.概述

python中的日志库logging使用起来有点像log4j,但配置通常比较复杂,构建日志服务器时也不是方便。标准库logging的替代品是loguruloguru使用起来就简单的多。

loguru默认的输出格式是:时间、级别、模块、行号以及日志内容。loguru不需要手动创建 logger,开箱即用,比logging使用方便得多;另外,日志输出内置了彩色功能,颜色和非颜色控制很方便,更加友好。

loguru是非标准库,需要事先安装,命令是:**pip3 install loguru****。**安装后,最简单的使用样例如下:

from loguru import loggerlogger.debug('hello, this debug loguru')logger.info('hello, this is info loguru')logger.warning('hello, this is warning loguru')logger.error('hello, this is error loguru')logger.critical('hello, this is critical loguru')

上述代码输出:

Python中loguru日志库如何使用

日志打印到文件的用法也很简单,代码如下:

from loguru import loggerlogger.add('myloguru.log')logger.debug('hello, this debug loguru')logger.info('hello, this is info loguru')logger.warning('hello, this is warning loguru')logger.error('hello, this is error loguru')logger.critical('hello, this is critical loguru')

上述代码运行时,可以打印到console,也可以打印到文件中去。

Python中loguru日志库如何使用

2.常见用法

2.1.显示格式

loguru默认格式是时间、级别、名称+模块和日志内容,其中名称+模块是写死的,是当前文件的__name__变量,此变量最好不要修改。

工程比较复杂的情况下,自定义模块名称,是非常有用的,容易定界定位,避免陷入细节中。我们可以通过logger.configure手工指定模块名称。如下如下:

import sysfrom loguru import loggerlogger.configure(handlers=[    {        "sink": sys.stderr,        "fORMat": "{time:YYYY-MM-DD HH:mm:ss.SSS} |<lvl>{level:8}</>| {name} : {module}:{line:4} | <cyan>mymodule</> | - <lvl>{message}</>",        "colorize": True    },])logger.debug('this is debug')logger.info('this is info')logger.warning('this is warning')logger.error('this is error')logger.critical('this is critical')

handlers:表示日志输出句柄或者目的地,sys.stderr表示输出到命令行终端。

"sink": sys.stderr,表示输出到终端

"format":表示日志格式化。<lvl>{level:8}</>表示按照日志级别显示颜色。8表示输出宽度为8个字符。

"colorize": True**:表示显示颜色。

上述代码的输出为:

Python中loguru日志库如何使用

这里写死了模块名称,每个日志都这样设置也是比较繁琐。下面会介绍指定不同模块名称的方法。

2.2.写入文件

日志一般需要持久化,除了输出到命令行终端外,还需要写入文件。标准日志库可以通过配置文件配置logger,在代码中也可以实现,但过程比较繁琐。loguru相对而已就显得稍微简单一些,我们看下在代码中如何实现此功能。日志代码如下:

import sysfrom loguru import loggerlogger.configure(handlers=[    {        "sink": sys.stderr,        "format": "{time:YYYY-MM-DD HH:mm:ss.SSS} |<lvl>{level:8}</>| {name} : {module}:{line:4} | <cyan>mymodule</> | - <lvl>{message}</>",        "colorize": True    },    {        "sink": 'first.log',        "format": "{time:YYYY-MM-DD HH:mm:ss.SSS} |{level:8}| {name} : {module}:{line:4} | mymodule | - {message}",        "colorize": False    },])logger.debug('this is debug')logger.info('this is info')logger.warning('this is warning')logger.error('this is error')logger.critical('this is critical')

与2.1.唯一不同的地方,logger.configure新增了一个handler,写入到日志文件中去。用法很简单。

上述只是通过logger.configure设置日志格式,但是模块名不是可变的,实际项目开发中,不同模块写日志,需要指定不同的模块名称。因此,模块名称需要参数化,这样实用性更强。样例代码如下:

import sysfrom loguru import loggerlogger.configure(handlers=[    {        "sink": sys.stderr,        "format": "{time:YYYY-MM-DD HH:mm:ss.SSS} |<lvl>{level:8}</>| {name} : {module}:{line:4} | <cyan>{extra[module_name]}</> | - <lvl>{message}</>",        "colorize": True    },    {        "sink": 'first.log',        "format": "{time:YYYY-MM-DD HH:mm:ss.SSS} |{level:8}| {name} : {module}:{line:4} | {extra[module_name]} | - {message}",        "colorize": False    },])log = logger.bind(module_name='my-loguru')log.debug("this is hello, module is my-loguru")log2 = logger.bind(module_name='my-loguru2')log2.info("this is hello, module is my-loguru2")

logger.bind(module_name='my-loguru')通过bind方法,实现module_name的参数化。bind返回一个日志对象,可以通过此对象进行日志输出,这样就可以实现不同模块的日志格式。

loguru中自定义模块名称的功能比标准日志库有点不同。通过bind方法,可以轻松实现标准日志logging的功能。而且,可以通过bind和logger.configure,轻松实现结构化日志。

上述代码的输出如下:

Python中loguru日志库如何使用

2.3.JSON日志

loguru保存成结构化json格式非常简单,只需要设置serialize=True参数即可。代码如下:

from loguru import loggerlogger.add('json.log', serialize=True, encoding='utf-8')logger.debug('this is debug message')logger.info('this is info message')logger.error('this is error message')

输出内容如下:

Python中loguru日志库如何使用

2.4.日志绕接

loguru日志文件支持三种设置:循环、保留、压缩。设置也比较简单。尤其是压缩格式,支持非常丰富,常见的压缩格式都支持,比如:"gz", "bz2", "xz", "lzma", "tar", "tar.gz", "tar.bz2", "tar.xz", "zip"。样例代码如下:

from loguru import loggerlogger.add("file_1.log", rotation="500 MB")  # 自动循环过大的文件logger.add("file_2.log", rotation="12:00")  # 每天中午创建新文件logger.add("file_3.log", rotation="1 week")  # 一旦文件太旧进行循环logger.add("file_X.log", retention="10 days")  # 定期清理logger.add("file_Y.log", compression="zip")  # 压缩节省空间

2.5.并发安全

loguru默认是线程安全的,但不是多进程安全的,如果使用了多进程安全,需要添加参数enqueue=True,样例代码如下:

logger.add("somefile.log", enqueue=True)

loguru另外还支持协程,有兴趣可以自行研究。

3.高级用法

3.1.接管标准日志logging

更换日志系统或者设计一套日志系统,比较难的是兼容现有的代码,尤其是第三方库,因为不能因为日志系统的切换,而要去修改这些库的代码,也没有必要。好在loguru可以方便的接管标准的日志系统。

样例代码如下:

import loggingimport logging.handlersimport sysfrom loguru import loggerhandler = logging.handlers.SysLogHandler(address=('localhost', 514))logger.add(handler)class LoguruHandler(logging.Handler):    def emit(self, record):        try:            level = logger.level(record.levelname).name        except ValueError:            level = record.levelno        frame, depth = logging.currentframe(), 2        while frame.f_code.co_filename == logging.__file__:            frame = frame.f_back            depth += 1        logger.opt(depth=depth, exception=record.exc_info).log(level, record.getMessage())logging.basicConfig(handlers=[LoguruHandler()], level=0, format='%(asctime)s %(filename)s %(levelname)s %(message)s',                    datefmt='%Y-%M-%D %H:%M:%S')logger.configure(handlers=[    {        "sink": sys.stderr,        "format": "{time:YYYY-MM-DD HH:mm:ss.SSS} |<lvl>{level:8}</>| {name} : {module}:{line:4} | [ModuleA] | - <lvl>{message}</>",        "colorize": True    },])log = logging.getLogger('root')# 使用标注日志系统输出log.info('hello wrold, that is from logging')log.debug('debug hello world, that is from logging')log.error('error hello world, that is from logging')log.warning('warning hello world, that is from logging')# 使用loguru系统输出logger.info('hello world, that is from loguru')

输出为:

Python中loguru日志库如何使用

3.2.输出日志到网络服务器

如果有需要,不同进程的日志,可以输出到同一个日志服务器上,便于日志的统一管理。我们可以利用自定义或者第三方库进行日志服务器和客户端的设置。下面介绍两种日志服务器的用法。

2.1.自定义日志服务器

日志客户端段代码如下:

# client.pyimport pickleimport Socketimport structimport timefrom loguru import loggerclass SocketHandler:    def __init__(self, host, port):        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)        self.sock.connect((host, port))    def write(self, message):        record = message.record        data = pickle.dumps(record)        slen = struct.pack(">L", len(data))        self.sock.send(slen + data)logger.configure(handlers=[{"sink": SocketHandler('localhost', 9999)}])while True:    time.sleep(1)    logger.info("Sending info message from the client")    logger.debug("Sending debug message from the client")    logger.error("Sending error message from the client")

日志服务器代码如下:

# server.pyimport pickleimport socketserverimport structfrom loguru import loggerclass LoggingStreamHandler(socketserver.StreamRequestHandler):    def handle(self):        while True:            chunk = self.connection.recv(4)            if len(chunk) < 4:                break            slen = struct.unpack('>L', chunk)[0]            chunk = self.connection.recv(slen)            while len(chunk) < slen:                chunk = chunk + self.connection.recv(slen - len(chunk))            record = pickle.loads(chunk)            level, message = record["level"].no, record["message"]            logger.patch(lambda record: record.update(record)).log(level, message)server = socketserver.tcpServer(('localhost', 9999), LoggingStreamHandler)server.serve_forever()

运行结果如下:

Python中loguru日志库如何使用

2.2.第三方库日志服务器

日志客户端代码如下:

# client.pyimport zMQfrom zmq.log.handlers import PUBHandlerfrom loguru import loggersocket = zmq.Context().socket(zmq.PUB)socket.connect("tcp://127.0.0.1:12345")handler = PUBHandler(socket)logger.add(handler)logger.info("Logging from client")

日志服务器代码如下:

# server.pyimport sysimport zmqfrom loguru import loggersocket = zmq.Context().socket(zmq.SUB)socket.bind("tcp://127.0.0.1:12345")socket.subscribe("")logger.configure(handlers=[{"sink": sys.stderr, "format": "{message}"}])while True:    _, message = socket.recv_multipart()    logger.info(message.decode("utf8").strip())

3.3.与pytest结合

官方帮助中有一个讲解logurupytest结合的例子,讲得有点含糊不是很清楚。简单的来说,pytest有个fixture,可以捕捉被测方法中的logging日志打印,从而验证打印是否触发。

下面就详细讲述如何使用logurupytest结合的代码,如下:

import pytestfrom _pytest.logging import LoGCaptureFixturefrom loguru import loggerdef some_func(i, j):    logger.info('Oh no!')    logger.info('haha')    return i + j@pytest.fixturedef caplog(caplog: LogCaptureFixture):    handler_id = logger.add(caplog.handler, format="{message}")    yield caplog    logger.remove(handler_id)def test_some_func_logs_warning(caplog):    assert some_func(-1, 3) == 2    assert "Oh no!" in caplog.text

测试输出如下:

Python中loguru日志库如何使用

到此,关于“Python中loguru日志库如何使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Python中loguru日志库如何使用

本文链接: https://lsjlt.com/news/353505.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python中loguru日志库如何使用
    这篇文章主要介绍“Python中loguru日志库如何使用”,在日常操作中,相信很多人在Python中loguru日志库如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python中loguru日志库如...
    99+
    2023-07-05
  • 如何在Python 中使用loguru日志框架
    如何在Python 中使用loguru日志框架?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。安装pip install loguru输出日志...
    99+
    2023-06-15
  • Python 第三方日志框架loguru使用
    解决中文乱码问题 项目地址 github: https://github.com/Delgan/loguru 文档:https://loguru.readthedocs.io/en/stable/index.html...
    99+
    2022-06-02
    Python 日志框架loguru Python 第三方日志框架
  • Python3 Loguru输出日志工具如何使用
    这篇文章主要介绍“Python3 Loguru输出日志工具如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python3 Loguru输出日志工具如何使用”文章能帮助大家解...
    99+
    2023-07-06
  • python第三方异步日志库loguru简介
    目录一、引言二、安装loguru三、特性3.1 开箱即用3.2 无需初始化,导入函数即可使用3.3 更容易的文件日志记录与转存/保留/压缩方式3.4 更优雅的字符串格式化输出3.5 ...
    99+
    2022-12-24
    python异步日志库loguru 第三方异步日志库loguru python日志库loguru python loguru
  • 怎么在python中利用 loguru记录日志
    本篇文章为大家展示了怎么在python中利用 loguru记录日志,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python有哪些常用库python常用的库:1.requesuts;2.scrapy...
    99+
    2023-06-14
  • Python3 Loguru输出日志工具的使用
    目录一、前言为什么要使用loguru二、优雅的使用loguru1. 安装loguru2.功能特性介绍3. 开箱即用,无需准备4. 更容易的文件日志记录与转存/保留/压缩方式5. 更优...
    99+
    2024-04-02
  • Python3 Loguru输出日志工具怎么使用
    一、前言Python logging 模块定义了为应用程序和库实现灵活的事件日志记录的函数和类。程序开发过程中,很多程序都有记录日志的需求,并且日志包含的信息有正常的程序访问日志还可能有错误、警告等信息输出,Python 的 logging...
    99+
    2023-05-15
    Python Loguru
  • 怎么在python中利用loguru对日志进行操作
    本篇文章为大家展示了怎么在python中利用loguru对日志进行操作,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具,Pytho...
    99+
    2023-06-14
  • Python日志管理模块Loguru的用法小结
    目录1、loguru的安装1.1、pip安装1.2、pycharm下安装2、loguru的简单使用2.1、使用非常简单2.2、add()函数2.3、创建记录日志文件2.3.1、创建日...
    99+
    2023-02-15
    Python 日志管理模块 Loguru Loguru使用 Python日志模块Loguru使用
  • C++日志库log4cplus如何使用
    本篇内容介绍了“C++日志库log4cplus如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!编译&&安装下载完成在u...
    99+
    2023-07-05
  • python中logging日志模块如何使用
    这期内容当中小编将会给大家带来有关python中logging日志模块如何使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。基本用法下面的代码展示了logging最基本的用法。# -*-&nbs...
    99+
    2023-06-04
  • Python中如何使用numpy记录日志?
    Python是一种广泛使用的编程语言,其强大的数据处理能力和丰富的第三方库使其成为数据科学和机器学习领域的首选语言。在这些应用程序中,记录日志是一个非常重要的任务,因为它可以帮助开发人员找到应用程序中的错误并进行适当的修复。在本文中,我们将...
    99+
    2023-08-10
    numpy 日志 linux
  • Python 在 Linux 容器中如何使用日志?
    随着云计算技术的快速发展,容器化技术越来越成为了企业构建和部署应用程序的首选方案。而在容器中运行 Python 应用程序,日志记录是至关重要的。本文将介绍如何在 Linux 容器中使用 Python 日志记录功能,以便更好地监控和调试应用...
    99+
    2023-11-09
    linux 容器 日志
  • Go语言Zap日志库如何使用
    这篇“Go语言Zap日志库如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Go语言Zap日志库如何使用”文章吧。一、日...
    99+
    2023-07-05
  • python如何使用print输出日志
    这篇文章主要为大家展示了“python如何使用print输出日志”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python如何使用print输出日志”这篇文章吧。如何使用 print 输出日志初...
    99+
    2023-06-27
  • Python日志模块logging如何使用
    这篇文章主要讲解了“Python日志模块logging如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python日志模块logging如何使用”吧!关于开发日志对于开发日志,很多程序...
    99+
    2023-06-30
  • MySQL中binlog日志如何使用
    本篇文章给大家分享的是有关MySQL中binlog日志如何使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。binlogbinlog用于记录数...
    99+
    2024-04-02
  • golang默认Logger日志库在项目中使用Zap日志库
    目录在Go语言项目中使用Zap日志库介绍默认的Go Logger日志库实现Go Logger设置Logger使用LoggerLogger的运行Go Logger的优势和劣势优势劣势U...
    99+
    2024-04-02
  • Golang定制化zap日志库如何使用
    本篇内容主要讲解“Golang定制化zap日志库如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Golang定制化zap日志库如何使用”吧!为什么需要日志一个产品的诞生一定是因为有需求!新...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作