欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python3中logging的使用

程序员文章站 2022-06-15 19:37:01
...

python3的logging模块可以实现日志的操作:包括信息输出到控制台、输出到指定的文件等等(类似于Java的log4j)

模块logging是是python3内置的标准模块,不需要像flask这些再进行单独安装了,直接拿来使用就是了

关于l日志的使用,也基本就是日志信息的控制台打印,日志信息写入到日志文件等等操作,这些在logging模块中都可以得到很好的支持,下面就是一步步来

第一步:当然就是导入

import logging

就是一句import(毫无疑问的嘛)

第二步构造logger对象

logging模块有一个getlogger函数,需要传入一个name参数(熟悉Java的同学,此时可以联想下log4j的初始化,挺像的)

logger = logging.getLogger(name)

第三步:对象构造好了,就是在此对象的基础上进行一些装饰了:包括上文提到的输出到控制台、输出到日志文件等等

3.1、日志输出格式

引入日志,肯定不想在控制台输出的时候还像print()函数那样无格式的输出吧,格式的设置呢,在logging模块里通过Formatter()函数进行,如下:

formatter = formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

至于,传给该函数的参数这些个格式,在官方的文档里头都有说明,总结下来每个单词格式就是:

%(levelno)s:打印日志级别的数值
%(levelname)s:打印日志级别的名称
%(pathname)s:打印当前执行程序的路径,其实就是sys.argv[0]
%(filename)s:打印当前执行程序名
%(funcName)s:打印日志的当前函数
%(lineno)d:打印日志的当前行号
%(asctime)s:打印日志的时间
%(thread)d:打印线程ID
%(threadName)s:打印线程名称
%(process)d:打印进程ID
%(message)s:打印日志信息

3.2、输出到控制台

这就需要用到StreamHandler()这个函数了,如下

# 启用输出到控制台的配置
console = logging.StreamHandler()
# 输出到控制台的信息的日志级别
console.setLevel(logging.DEBUG)
# 输出到控制台的信息格式
console.setFormatter(formatter)
logger.addHandler(console)

最后一个addHandler()就是为该logging对象启用输出到控制台的配置(可以理解为对象的装饰)

3.3、输出到的指定的日志文件

使用FileHandler()函数可以实现该功能

handle = logging.FileHandler('./log/log.txt')
# 输出到日志文件的日志级别
handle.setLevel(logging.INFO)
handle.setFormatter(formatter)
logger.addHandler(handle)

这里需要注意:

1、如果指定的日志输出文件不存在,执行后会先创建该文件然后在写入信息

2、日志写入是以追加的形式写入的,每次操作的信息不会覆盖上次的(open()函数,参数带的是'a'而不是'w')

下面这个是完整代码:

# -*- coding: utf-8 -*-
import logging


class LoggerFactory:
    def __init__(self, name=__name__):
        """
        实例化LoggerFactory类时的构造函数
        :param name: 
        """
        # 实例化logging
        self.logger = logging.getLogger(name)
        # 输出的日志格式
        self.formatter = formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

    def create_logger(self):
        """
        构造一个日志对象
        :return:
        """
        # 设置日志级别
        self.logger.setLevel(logging.DEBUG)
        # 设置日志输出的文件
        handle = logging.FileHandler('./log/log.txt')
        # 输出到日志文件的日志级别
        handle.setLevel(logging.INFO)
        handle.setFormatter(self.formatter)
        self.logger.addHandler(handle)
        # 输出到控制台的显示信息
        console = logging.StreamHandler()
        console.setLevel(logging.DEBUG)
        console.setFormatter(self.formatter)
        self.logger.addHandler(console)


if __name__ == '__main__':
    factory = LoggerFactory('Test_Main')
    factory.create_logger()
    factory.logger.debug('>>>>>这是测试DEBUG输出<<<<<')
    factory.logger.info('>>>>>这是测试INFO输出<<<<<')
    factory.logger.warning('>>>>>这是测试WARNING输出<<<<<')
    factory.logger.error('>>>>>这是测试ERROR输出<<<<<')

执行后,控制台的输出信息如下:

python3中logging的使用

输出到文件./log/log.txt中的信息如下:

python3中logging的使用

好了,完成,收工了