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

python日志模块logging

程序员文章站 2022-07-14 23:10:41
...

python使用日志模块logging

在python项目中可以使用logging模块来管理记录的日志。

简单配置

使用basicConfig()方法简单地配置logger即可满足基本的需求。

basicConfig()方法参数如下:

参数名称 参数说明
filename 日志输出文件的文件名
filemode 打开文件的模式,有r(+)、w(+)和a(+)
format 日志输出的格式
datefat 日志输出的日期格式
style 格式占位符
level 设置日志输出级别
stream 定义输出流,不能与filename参数同时使用
handles 定义处理器,用来创建handler对象,不能和filename、stream参数同时使用

示例代码如下:

import logging

logging.basicConfig(filename="test.log", filemode="w", format="%(asctime)s %(name)s:%(levelname)s:%(message)s", datefmt="%d-%M-%Y %H:%M:%S", level=logging.DEBUG)
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')

#使用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')

自定义logger

除了使用basicConfig()方式配置logger之外,我们还可以自定义logger。示例代码:

import logging
import logging.handlers

def getLogger():
    logger = logging.getLogger("logger")

    handler1 = logging.StreamHandler()                                  #获取输出流handler,用于将日志输出到命令行
    handler2 = logging.FileHandler(filename="segmentation.log")         #获取文件handler,用于将日志输出到文件

    logger.setLevel(logging.DEBUG)                                      #设置日志等级
    handler1.setLevel(logging.DEBUG)
    handler2.setLevel(logging.DEBUG)

    formatter = logging.Formatter("%(asctime)s %(name)s %(levelname)s %(message)s")     #设置日志输出的格式
    handler1.setFormatter(formatter)
    handler2.setFormatter(formatter)

    logger.addHandler(handler1)                                         #日志输出到handler
    logger.addHandler(handler2)

    return logger
    
#使用logger输出日志
logger = getLogger()
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')

其中,输出格式formatter变量如下:

变量 格式 描述
asctime %(sactime)s 将日志时间构造成可读的形式
name %(name) 日志对象的名称
filename %(filename)s 不包含路径的文件名
pathname %(pathname)s 包含路径的文件名
funcName %(funcName)s 日志记录所在的函数名
levelname %(levelname)s 日志级别名称
message %(message)s 具体的日志信息
lineno %(lineno)d 日志记录所在的行号
pathname %(pathname)s 完整路径
process %(process)d 当前进程ID
processName %(processName)s 当前进程名称
thread %(thread)d 当前线程ID
threadName %(threadName)s 当前线程名称

Logger单例模式

一个系统只有一个Logger对象,并且该对象不能被直接实例化,这里使用的是单例模式,获取对象的方法为getLogger。

我们可以创建多个Logger对象,但是真正输出日志的是根Logger对象。每个Logger对象都可以设置一个名字,例如:

logger = logging.getLogger(__name__)    #__name__代表当前模块的名称(默认为__main__)

更多关于logging的内容,请查看官方文档