Python日志模块logging的使用方法总结

yizhihongxing

下面我会为你详细讲解“Python日志模块logging的使用方法总结”的完整攻略。

1. logging模块的概述和常用组件

logging模块是Python的标准库之一,用于记录日志信息。它提供了非常丰富的设置选项,可以控制日志输出的格式、级别、处理方式等,可以让我们方便地记录和分析程序的运行状态。

  • 日志级别

logging模块定义了7种日志级别,从高到低分别是:

CRITICAL 50
ERROR 40
WARNING 30
INFO 20
DEBUG 10
NOTSET 0

通过设置日志级别,我们可以控制日志输出的详细程度,只输出到指定级别或以上的日志。

  • 日志记录器

为了方便对不同的模块或方法进行分类,logging模块提供了Logger类来实现不同的日志记录器。

  • 日志处理器

除了将日志输出到控制台和文件之外,logging模块还提供了多种处理器,可以将日志输出到网络、邮件等位置。

2. logging模块的基本用法

使用logging模块记录日志主要分以下3个步骤:

  • 创建Logger对象

通过Logger类创建一个记录器,可以指定记录器的名称、日志级别等属性。

import logging

logger = logging.getLogger('mylogger')
logger.setLevel(logging.DEBUG)

  • 创建Handler对象

在记录器中添加日志处理器,可以将日志输出到不同的设备上,例如输出到文件或者控制台。

# 创建一个文件Handler,用于写入日志文件
fh = logging.FileHandler('test.log')
fh.setLevel(logging.INFO)

# 创建一个控制台Handler,用于输出到控制台
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)

# 添加Handler到Logger
logger.addHandler(fh)
logger.addHandler(ch)

  • 记录日志

通过Logger对象调用debug()、info()、warning()、error()、critical()等函数记录日志。该类方法定义了不同级别的日志记录方法,开发者根据实际情况选择对应方法来记录日志。

# 记录日志
logger.debug('debug message')
logger.info('info message')
logger.warning('warn message')
logger.error('error message')
logger.critical('critical message')

3. 示例一:控制台输出和文件输出

下面的示例代码包括如下几个部分:

  • 为logging模块设置基础配置,包括控制台输出、文件输出、日志级别等设置
  • 定义多个不同的记录器,分别将日志输出到不同的文件和控制台
  • 调用多个记录器来记录不同级别的日志信息
import logging

logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(name)-15s %(levelname)-8s %(message)s',
                    datefmt='%m-%d %H:%M',
                    filename='myapp.log',
                    filemode='a')

console = logging.StreamHandler()
console.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(name)-15s: %(levelname)-8s %(message)s')
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)


logger1 = logging.getLogger('example1')
logger1.setLevel(logging.WARNING)

logger2 = logging.getLogger('example2')
logger2.setLevel(logging.DEBUG)

logger1.debug('this is a debug message for logger1')
logger1.info('this is a info message for logger1')
logger1.warning('this is a warning message for logger1')
logger2.error('this is an error message for logger2')
logger2.critical('this is a critical message for logger2')

4. 示例二:使用自定义日志类

通过继承logging.Logger类和logging.Handler类,我们可以自定义日志类,来实现更加细粒度的日志输出和处理。

下面的示例代码演示了如何创建一个自定义日志类,并重载emit()方法实现输出日志到文件时增加进程ID的功能:

import os
import logging
import logging.handlers
import threading


class MyLogger(logging.Logger):
    def makeRecord(self, name, level, fn, lno, msg, args, exc_info, func=None, extra=None, sinfo=None):
        rv = logging.LogRecord(name, level, fn, lno, msg, args, exc_info, func, sinfo)
        if extra is not None:
            for key in extra:
                if (key in ["processName", "threadName"]) and isinstance(extra[key], str):
                    setattr(rv, key, extra[key])

        rv.processID = os.getpid()

        return rv

class MyHandler(logging.handlers.RotatingFileHandler):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    def emit(self, record):
        record.message = "[PID:{0}] {1}".format(record.processID, record.getMessage())
        super().emit(record)


logger = MyLogger(name='test')
logger.setLevel(logging.INFO)

fh = MyHandler(filename='test.log', maxBytes=10*1024*1024, backupCount=5, encoding='utf-8')
fh.setLevel(logging.DEBUG)
fh.setFormatter(logging.Formatter('%(asctime)s [%(levelname)s] [%(name)s] %(message)s'))
logger.addHandler(fh)

logger.debug('this is a debug message')
logger.info('this is a info message')
logger.warning('this is a warning message')
logger.error('this is an error message')
logger.critical('this is a critical message')

以上就是关于“Python日志模块logging的使用方法总结”的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python日志模块logging的使用方法总结 - Python技术站

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

相关文章

  • 在Django中动态地过滤查询集的实现

    在Django中,我们可以使用QuerySet对象来进行数据库操作,包括增删改查等。而有时候我们需要在查询的时候进行动态的过滤,通常是由用户选择输入不同的过滤条件导致的。 以下是在Django中动态地过滤查询集的实现的完整攻略: 步骤一:建立基础查询集 首先,我们需要建立一个基础的QuerySet对象,这个QuerySet对象是没有经过任何过滤的,可以通过以…

    人工智能概论 2023年5月25日
    00
  • Nginx+Tomcat负载均衡集群的实现示例

    下面是“Nginx+Tomcat负载均衡集群的实现示例”的完整攻略。 一、概述 本文将介绍如何使用Nginx和Tomcat搭建负载均衡集群。负载均衡是实现高可用性和高性能关键组件之一,它可以将请求分发到多个服务器上,从而实现负载分担和故障转移。本文将首先介绍负载均衡的原理,然后介绍如何使用Nginx和Tomcat搭建负载均衡集群。 二、负载均衡原理 负载均衡…

    人工智能概览 2023年5月25日
    00
  • python调用matlab的方法详解

    要在 Python 中调用 MATLAB,有两种常见的方法:使用 MATLAB 软件提供的 API 或使用开源的 python-MATLAB 引擎。 方法一:使用 MATLAB 软件提供的 API 1. 安装 MATLAB 软件 在安装 MATLAB 软件时,选中 MATLAB 引擎 for Python,并将其安装到 Python 的环境中。 2. 导入 …

    人工智能概览 2023年5月25日
    00
  • C++ OpenCV学习之图像金字塔与图像融合详解

    C++ OpenCV学习之图像金字塔与图像融合详解 前言 图像金字塔和图像融合在计算机视觉中有广泛的应用。本篇文章将详细讲解如何使用C++ OpenCV实现图像金字塔和图像融合,包括基本的概念和原理以及示例代码。 图像金字塔 什么是图像金字塔? 图像金字塔是一种处理图像的技术,通常用于图像缩放或增强。它通过将原始图像逐步降采样来生成一系列图像,每个图像比前一…

    人工智能概览 2023年5月25日
    00
  • Pytorch中的 torch.distributions库详解

    Pytorch中的 torch.distributions库详解 Pytorch中的torch.distributions库是一个用于生成随机变量的子库,旨在为深度学习和概率建模提供强大的支持。可以使用该库生成多种概率分布(例如正态分布、均匀分布、泊松分布等),并使用相关函数进行采样、求概率密度函数、计算累积分布函数等操作。本篇文章将详细讲解torch.di…

    人工智能概论 2023年5月24日
    00
  • Cloudflare免费免备案cdn加速优化设置方法指南

    Cloudflare免费免备案CDN加速优化设置方法指南 什么是Cloudflare Cloudflare是一家全球领先的互联网安全和性能公司,提供CDN加速、防护、DNS服务等。在我们的网站上使用Cloudflare可以让网站更安全、更快速,更具可靠性。 如何开启Cloudflare 首先,你需要在Cloudflare官网上注册一个账号。 注册之后,你需要…

    人工智能概览 2023年5月25日
    00
  • 利用Python编写一个简单的缓存系统

    下面我就为你讲解如何利用Python编写一个简单的缓存系统: 1. 什么是缓存系统? 缓存系统是一个用于缓存和快速访问经常使用的数据的系统。缓存系统通常包括一个执行缓存操作的程序和存储缓存数据的数据库。 2. Python中的缓存系统 Python中有很多缓存系统库,例如lru_cache、redis等。这里我们以lru_cache为例来讲解如何实现缓存系统…

    人工智能概论 2023年5月25日
    00
  • Python下应用opencv 实现人脸检测功能

    Python下应用OpenCV实现人脸检测功能 前言 OpenCV是计算机视觉领域中一个非常常用且广受欢迎的开源库,它提供了丰富的算法和工具函数,可以帮助我们快速搭建计算机视觉应用。其中,人脸检测功能是一个十分实用的应用领域,可以用于人脸识别、智能安防等领域。 本篇文章将会介绍如何使用Python下的OpenCV库,通过自带的分类器实现人脸检测的功能。 安装…

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