python logging类库使用例子

yizhihongxing

当我们的 Python 代码出现了错误或异常时,通常会使用 Python 自带的 print 函数将错误信息输出到控制台。但在实际的项目开发中,控制台信息往往是不够直观和清晰的。这时候,我们就需要 Python 的 logging 类库来协助我们进行日志打印管理。

1. Logging 类库简介

Python 自带了 logging 库可以方便地进行日志打印管理,可以将日志输出到控制台、文件和远程服务器等多种方式。

2. Python logging 类库使用流程

2.1 导入 logging 包
我们需要先导入 Python 的 logging 包,并进行一些指定。

import logging
logging.basicConfig(filename="example.log", level=logging.DEBUG)

在创建了一个日志记录器后,需要设置日志的基本属性,比如日志文件、日志级别等。这里我们将日志输出到 example.log 文件,并将日志的级别设置为 DEBUG

2.2 使用 logging 输出日志
在我们需要输出日志信息的时候,使用 logging 就得心应手了。

logging.debug("This is a debug message")
logging.info("This is an info message")
logging.warning("This is a warning message")
logging.error("This is an error message")
logging.critical("This is a critical message")

这里我模拟了5种情况,分别为 DEBUG、INFO、WARNING、ERROR、CRITICAL,表示日志的不同级别。

这些级别按照从低到高的顺序排列:DEBUG、INFO、WARNING、ERROR、CRITICAL,当日志记录器的级别设置为某个级别时,比该级别低的消息将被忽略。

2.3 其他高级用法
在实际项目中,使用 logging 的机会更多是写到文件里面去,比如下面这种写法:

import logging

# 创建并配置 logger
logger = logging.getLogger("test")
logger.setLevel(logging.DEBUG)

# 创建文件目录
fh = logging.FileHandler(filename="example.log", mode="w", encoding="utf-8")
fh.setLevel(logging.DEBUG)

# 设置日志格式
formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(filename)s - %(lineno)d - %(message)s")
fh.setFormatter(formatter)

# 将文件 handler 添加进 logger 中
logger.addHandler(fh)

# 记录日志
logger.debug("This is a debug message")
logger.info("This is an info message")
logger.warning("This is a warning message")
logger.error("This is an error message")
logger.critical("This is a critical message")

3. 使用例子说明

为了更好地理解它在 Python 代码中的实际应用,下面我们给出两个 Python logging 类库使用的示例:

3.1 示例一:获取 IP 地址

import requests
import logging

logging.basicConfig(filename="example.log", filemode="w", level=logging.INFO)

try:
    url = "https://api.ipify.org?format=json"
    resp = requests.get(url, timeout=5)
    resp.raise_for_status()
    logging.info(f"Get IP: {resp.json()['ip']}")
except Exception as e:
    logging.error(f"Failed to get IP address: {e}")

这个示例代码使用 logging 包来输出请求 IP 地址的过程中可能出现的错误。比如请求超时异常需要记录错误日志,返回 IP 地址需要记录信息日志。当然为了更好地体验 logging 包的效果,我们将日志信息输出到文件 example.log 中。

3.2 示例二:模拟一些实际的场景

import logging
import time

logging.basicConfig(level=logging.DEBUG,
                    format="%(asctime)s - %(levelname)s - %(message)s")
logger = logging.getLogger(__name__)

def process():
    logger.debug("Start processing")

    for i in range(3):
        logger.info(f"Processing task {i}")
        time.sleep(0.5) # 模拟任务执行时间

    logger.warning("Processing completed")

if __name__ == "__main__":
    process()

这个示例代码模拟了一个任务流程,我们在执行任务的时候无须使用 print 来输出当前的任务步骤。在任务执行过程中输出相应的日志级别,到最后再输出任务结束即可。

4. Logging 类库结论

日志管理是应用系统开发中一个重要组份,可以做到应用系统重大事件的记录和后期分析。Python 语音中的 logging 包提供了便捷的日志分级,日志输出等处理功能。日志的处理过程中包含 handler 表示处理器,格式化等重要概念。有必要我们学会日志级别的分配和管理,使我们开发的应用系统具有良好的可维护性和可扩展性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python logging类库使用例子 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • django API 中接口的互相调用实例

    下面给你详细讲解“Django API 中接口的互相调用实例”的完整攻略。 什么是Django API Django API是指基于Django框架来开发的Web API。它提供了一套用于构建Web服务的工具和开发API的方法。 接口的互相调用 在Django API中,各个接口之间是可以相互调用的。这种调用方式可以将多个接口组合在一起,实现更加复杂的业务逻…

    人工智能概论 2023年5月25日
    00
  • 解析Node.js基于模块和包的代码部署方式

    Node.js采用基于模块和包的代码部署方式,这意味着在开发过程中,我们可以将整个代码分成小的独立模块,每个模块都有自己的功能和目的。这就使得代码更加可读,易于维护和重构,同时也方便代码的重复使用。在部署和发布代码时,我们需要考虑这些模块和包如何被部署到服务器上。 以下是一些可以帮助你学习解析Node.js基于模块和包的代码部署方式的指南: Node.js的…

    人工智能概览 2023年5月25日
    00
  • 详解Python中的数据精度问题

    详解Python中的数据精度问题 在Python中使用浮点数时,往往会遇到数据精度问题,这是由于计算机内部浮点数表示与我们平常的十进制表示方式存在差异引起的。本文将详细讲解Python中的数据精度问题,并提供解决方案。 1. 浮点数的精度问题 浮点数是计算机中一种常用的数据类型,但是它的精度并不是无限的。在计算机中,浮点数采用二进制方式表示,有时会出现小数无…

    人工智能概论 2023年5月25日
    00
  • pandas库中 DataFrame的用法小结

    下面是“pandas库中 DataFrame的用法小结”的完整攻略,分为以下几个部分: 1. 什么是DataFrame DataFrame是pandas库中的一种数据结构,类似于Excel中的数据表。DataFrame有行和列,行代表样本,列代表特征。DataFrame可以由多种数据源创建,包括Numpy数组、Python字典、CSV文件等。 2. 创建Da…

    人工智能概论 2023年5月25日
    00
  • pytorch + visdom CNN处理自建图片数据集的方法

    对于使用PyTorch训练CNN的过程,一般情况下需要进行图片的预处理、数据集的加载,以及训练过程的可视化等步骤。其中,使用visdom进行训练过程的可视化非常方便,其支持的图形工具非常丰富。 下面,我们将围绕着“pytorch + visdom CNN处理自建图片数据集的方法”,从以下几个方面进行详细讲解。 1.数据集的准备 对于训练CNN所需的数据集,一…

    人工智能概论 2023年5月25日
    00
  • 关于PyTorch源码解读之torchvision.models

    关于PyTorch源码解读之torchvision.models的攻略,主要可以分为以下几个步骤: 1. 导入torchvision.models 在使用torchvision.models之前,需要先将其导入到Python环境中: import torchvision.models as models 2. 加载模型 在导入了torchvision.mod…

    人工智能概论 2023年5月25日
    00
  • windows下Nginx日志处理脚本

    下面是关于“Windows下Nginx日志处理脚本”的详细攻略。 一、背景 Nginx是一款高性能的Web服务器,它能够快速处理大量请求。在开发网站时,我们会使用Nginx来提供网站服务。Nginx会记录访问日志,其中包含了访问者的IP地址、请求的URL、响应状态码等信息。 针对这些Nginx记录的日志信息,我们需要分析日志才能更好地了解网站的访问情况、用户…

    人工智能概览 2023年5月25日
    00
  • 对pytorch中不定长序列补齐的操作

    下面是对PyTorch中不定长序列补齐的操作的完整攻略。 1. 序列补齐的操作 在处理序列数据时,由于序列长度不一,常常需要对长度不足的序列进行补齐操作。补齐操作指的是将长度小于预定长度的序列,通过在序列中添加一些特殊字符(比如PAD)或者重复序列元素等方式,将其长度补齐至预定长度。补齐操作可以使得序列数据可以被组成batch,在训练神经网络时方便使用。 P…

    人工智能概论 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部