文章目录

  • logging介绍
  • logging.basicConfig定义
  • logging.basicConfig参数说明
  • logging.basicConfig日志等级说明
  • logging.basicConfig示例代码
  • logging.basicConfig 的level设置
  • 创建新的logging对象
  • 示例代码
  • 说明


logging介绍

logging.basicConfig定义

首先查看一下函数提示信息截图:

python3 logging 显示info python logging filename_示例代码

logging.basicConfig参数说明

logging.basicConfig函数参数详细介绍:
filename: 指定日志文件名
filemode: 和file函数意义相同,指定日志文件的打开模式,默认为’a’
format: 指定输出的格式和内容,format可以输出很多有用信息:
%(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: 打印日志信息
datefmt: 指定时间格式,同time.strftime()
level: 设置日志级别,默认为logging.WARNING
stream: 指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略

logging.basicConfig日志等级说明

日志level说明:

python3 logging 显示info python logging filename_示例代码_02


设置level的作用就是过滤等级低的日志。

logging.basicConfig示例代码

import logging

# 设置文件名,设置文件写模式:append,设置文件输出登记:info
# 设置日志打印格式:打印日志级别,日志时间,打印当前模块名,打印当前行号,打印日志信息
# 设置时间格式
logging.basicConfig(filename='testLog.txt', filemode='a', level=logging.DEBUG,
                    format='%(levelname)s %(asctime)s %(filename)s %(lineno)d : %(message)s',
                    datefmt='%a, %d %b %Y %H:%M:%S')


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

logging.basicConfig 的level设置

当我设置:level=logging.DEBUG,打印结果为:

python3 logging 显示info python logging filename_打印日志_03


当我设置:level=logging.WARN,打印结果为:

python3 logging 显示info python logging filename_示例代码_04


我们可以通过这种方式设置打印的日志级别。发布前,可以把debug信息打印出来,对外发布就打印warn及以上就好。

创建新的logging对象

示例代码

# 自定义logger对象,设置对象名:test,默认logger的level是warning,并且format为空
logger = logging.getLogger(name='test')
logger.setLevel(logging.DEBUG)  # 默认WARN,修改成DEBUG,INFO才能打印出来
cHandler = logging.StreamHandler()
fHandler = logging.FileHandler("fileLog.txt")
cHandler.setLevel(logging.ERROR)
fHandler.setLevel(logging.INFO)


cFormat = logging.Formatter('%(name)s - %(levelname)s - %(message)s')
fFormat = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
cHandler.setFormatter(cFormat)
fHandler.setFormatter(fFormat)
logger.addHandler(cHandler)
logger.addHandler(fHandler)

def func():
    logger.debug('This is a debug message.')
    logger.info('This is a info.')
    logger.warning('This is a warning.')
    logger.error('This is a error.')
    logger.critical('This is a critical.')


if __name__ == "__main__":
    func()

结果:

python3 logging 显示info python logging filename_示例代码_05


python3 logging 显示info python logging filename_python_06

说明

自定义对象logger ,可以给logger 添加多个addHandler,并且针对不同的handler,可以设置不同的format,level等。
在写代码时,可以把需要输出的信息,打印到文件中,一些其他信息打印到控制台里面,方便查看,并且方便控制。