python的logging模块及应用

Posted Maruying

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python的logging模块及应用相关的知识,希望对你有一定的参考价值。

一、logging日志模块等级

常见log级别从高到低:

CRITICAL 》ERROR 》WARNING 》INFO 》DEBUG,默认等级为WARNING即>=WARNING级别的log才输出。

日志等级(level) 描述
CRITICAL 当发生严重错误,导致应用程序不能继续运行时记录的信息
ERROR 由于一个更严重的问题导致某些功能不能正常运行时记录的信息
WARNING 当某些不期望的事情发生时记录的信息(如,磁盘可用空间较低),但是此时应用程序还是正常运行的
INFO 信息详细程度仅次于DEBUG,通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作
DEBUG 最详细的日志信息,典型应用场景是 问题诊断

 

二、logging模块的使用方式介绍

logging模块提供了两种记录日志的方式:

  • 第一种方式是使用logging提供的模块级别的函数
  • 第二种方式是使用Logging日志系统的四大组件

其实,logging所提供的模块级别的日志记录函数也是对logging日志系统相关类的封装而已。

(1)logging模块定义的模块级别的常用函数

 

函数说明
logging.debug(msg, *args, **kwargs) 创建一条严重级别为DEBUG的日志记录
logging.info(msg, *args, **kwargs) 创建一条严重级别为INFO的日志记录
logging.warning(msg, *args, **kwargs) 创建一条严重级别为WARNING的日志记录
logging.error(msg, *args, **kwargs) 创建一条严重级别为ERROR的日志记录
logging.critical(msg, *args, **kwargs) 创建一条严重级别为CRITICAL的日志记录
logging.log(level, *args, **kwargs) 创建一条严重级别为level的日志记录
logging.basicConfig(**kwargs) 对root logger进行一次性配置

其中logging.basicConfig(**kwargs)函数用于指定“要记录的日志级别”、“日志格式”、“日志输出位置”、“日志文件的打开模式”等信息,其他几个都是用于记录各个级别日志的函数。

(2)logging模块的四大组件

组件说明
loggers 提供应用程序代码直接使用的接口
handlers 用于将日志记录发送到指定的目的位置
filters 提供更细粒度的日志过滤功能,用于决定哪些日志记录将会被输出(其它的日志记录将会被忽略)
formatters 用于控制日志信息的最终输出格式

三、自定义Logger模块类

# testLog1.py

import logging
import time

class Logger():

    def __init__(self, logger, level=logging.DEBUG):
        \'\'\'
     : 自定义Logger模块类
: logger: logger名 : level: 日志级别 \'\'\' # 创建一个logger self.logger = logging.getLogger(logger) self.logger.setLevel(level) # 定义handler的输出格式 curr_time = time.strftime("%Y-%m-%d") self.LogFileName = \'log\' + curr_time + \'.txt\' fmt = logging.Formatter(\'%(asctime)s - %(filename)s:[%(lineno)s] - [%(levelname)s] - %(message)s\') # asctime: 日志事件发生的时间 # filename: 源文件的名称部分,包含文件后缀 # lineno: 调用日志记录函数的源代码所在的行号 # evelname: 该日志记录的文字形式的日志级别 # message: 日志记录的文本内容 # 创建一个handler, 用于写入日志文件 fh = logging.FileHandler(self.LogFileName) fh.setLevel(logging.DEBUG) fh.setFormatter(fmt) # 再创建一个handler,用于输出到控制台 ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) ch.setFormatter(fmt) # 给logger添加handler self.logger.addHandler(fh) self.logger.addHandler(ch) # level优先级 # logger.setLevel > handler.setLevel > logging.basicConfig if __name__ == "__main__": log = Logger(__name__, level=logging.DEBUG) log.logger.debug(\'debug\') log.logger.log(logging.DEBUG, \'debug\')

# 执行testLog1.py,则控制台输出如下:
2020-08-03 20:36:47,104 - testLog1.py:[117] - [DEBUG] - debug
2020-08-03 20:36:47,104 - testLog1.py:[118] - [DEBUG] - debug

# 日志文件记录如下:
2020-08-03 20:36:15,982 - testLog1.py:[117] - [DEBUG] - debug
2020-08-03 20:36:15,982 - testLog1.py:[118] - [DEBUG] - debug
# testLog2.py

from testLog1 import Logger
import traceback

log = Logger(__name__)
def func():
   try:
       assert 1==2
   except Exception:
       log.logger.info(\'测试失败,输出信息如下:{}\'.format(traceback.format_exc()))
    #
traceback.format_exc() 会返回异常信息的字符串 if __name__ == "__main__": func()

# 执行testLog2.py,则控制台输出如下:
2020-08-03 20:43:44,907 - testLog2.py:[11] - [INFO] - 测试失败,输出信息如下:Traceback (most recent call last):
  File "E:/imooc/testLog.py", line 9, in func
    assert 1==2
AssertionError

# 日志文件记录如下:
2020-08-03 20:43:44,907 - testLog2.py:[11] - [INFO] - 测试失败,输出信息如下:Traceback (most recent call last):
  File "E:/imooc/testLog.py", line 9, in func
    assert 1==2
AssertionError

 

参考:https://www.cnblogs.com/yyds/p/6901864.html

以上是关于python的logging模块及应用的主要内容,如果未能解决你的问题,请参考以下文章

Python接口自动化浅析logging日志原理及模块操作流程

Python接口自动化浅析logging日志原理及模块操作流程

Python_logging在多模块项目中日志输出应用

python之约束加密及logging模块

python标准日志模块logging及日志系统设计

Python-logging详解(彩色日志扩展,多进程安全等)