c语言编程笔录

首页 >   > 笔记大全

笔记大全

Python中loguru日志库怎么使用

更新时间:2023-10-28

Loguru是什么?

Loguru是Python的一款日志记录库。它提供了一种易于使用的API,并支持各种类型的日志记录:文件,控制台,syslog,Graylog,Elasticsearch和Cloudwatch。 在没有任何配置的情况下,它甚至可以自动格式化所有记录,从而减少了代码量和痛苦。

Loguru怎么使用?

使用loguru,需要先通过pip安装。 可以在终端中使用以下命令来安装。

  pip install loguru
  

安装完毕后,可以使用以下方式初始化loguru日志记录器:

  from loguru import logger

  logger.info("Hello, loguru")
  logger.debug("This is debug information")
  logger.warning("Warning! Warning!")
  logger.error("Danger! Danger!")
  logger.critical("Critical error!")
  

默认情况下,所有日志信息都将被写入屏幕输出。

Loguru的配置

可以使用loguru进行丰富的配置。下面是一个例子,你可以将其复制并粘贴到你的Python脚本中,以便更多地了解Loguru的功能:

  from loguru import logger
  from loguru import _defaults

  class InterceptHandler(logging.Handler):
      def emit(self, record):
          # Retrieve context where the logging call occurred, this happens to be in the 6th frame upward
          loogging_frame = logging.currentframe()
          loguru_frame = loogging_frame.f_back.f_back.f_back
          context = _loguru_context_from_frame(loguru_frame)

          # Use Loguru instead
          logger_opt = {} if context is None or not context.get("capture_locals") else {"record": record}
          logger.opt(depth=6, exception=record.exc_info, lazy=True, **logger_opt).log(record.levelno, record.getMessage())

  logging.basicConfig(handlers=[InterceptHandler()], level=logging.INFO)

  # Custom filtering example
  from loguru import logger

  def custom_filter(record):
      # Properties can be added dynamically in the record object
      record.custom_property = "I am a custom property"
      return True  

  logger.add("file.log", level="INFO", filter=custom_filter)
  logger.info("Hello, loguru")
  

Loguru和Flask结合使用

当使用Loguru和Flask时,您可以使用以下代码初始化Loguru,并将其绑定到Flask的应用程序中:

  from loguru import logger
  from flask import Flask

  app = Flask(__name__)

  @app.before_request
  def before_request_callback():
      logger.remove()
      logger.add("logs.log", level="INFO", rotation="25 days")

  @app.errorhandler(Exception)
  def handle_error(error):
      logger.exception("Uncaught exception")
      return "Internal server error", 500

  if __name__ == '__main__':
      app.run()
  

在这个例子中,在Flask应用程序中添加了两个全球异常事件 – before_request_callback和handle_error。before_request_callback在每个请求开始时清除任何已定义的日志记录器并将其添加到指定文件logs.log中。handle_error记录了任何未处理的异常。

总结

使用Loguru,您可以轻松地生成各种类型的日志信息,并将其记录到文件或控制台输出。Loguru支持Flask,Django,FastAPI等框架和库。Loguru使用非常简单,并且可以在您的应用程序中进行丰富的配置,以满足您的不同需求。