python logging模块

logging支持的日志五个级别

  • debug() 调试级别,一般用于记录程序运行的详细信息
  • info() 事件级别,一般用于记录程序的运行过程
  • warnning() 警告级别,,一般用于记录程序出现潜在错误的情形
  • error() 错误级别,一般用于记录程序出现错误,但不影响整体运行
  • critical 严重错误级别 , 出现该错误已经影响到整体运行

logging.basicConfig函数

实例代码:

logging.basicConfig(level=logging.DEBUG, format="%(asctime)s|%(levelname)s|%(filename)s:%(lineno)s|%(message)s",
                            datefmt="%Y-%m-%d %H:%M:%S")
name = '张三'
age = 18
logging.debug("姓名 %s, 年龄 %d, ", name, age)
logging.warning("姓名 %s, 年龄 %d, ", name, age)

输出:

2020-12-16 10:54:02|DEBUG|log.py:66|姓名 张三, 年龄 18, 
2020-12-16 10:54:02|WARNING|log.py:67|姓名 张三, 年龄 18, 

主要可以对日志的输出格式及方式做相关配置支持的参数由:

  • filename: 指定日志文件名
  • filemode: 和file函数意义相同,指定日志文件的打开模式,'w'或'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,可选 logging.DEBUG logging.INFO logging.WARNING logging.ERROR logging.CRITICAL
  • stream: 指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略

logging工作流程:

logging的四大组件

  • Loggers:记录器, 提供应用程序可直接使用的接口
  • Handlers :处理器,将记录器产生的日志发送至目的地
  • Filters:过滤器,提供了过滤日志信息的方法
  • Formatters:格式化器, 指定日志显示格式

组件分析:

  • Loggers:记录器

  1.提供调用程序的调用接口

  logger = logging.getLogger(__name__)

  logger是单例的

  2. 决定日志记录的级别

  logger.setLevel()

  3. 将日志内容传递到相关联的handlers中

  logger.addHandler()和logger.removeHandler()

  • Handlers处理器

    将日志分发到不同的目的地。可以是文件、标准输出、邮件、或者通过socket、http等协议发送到任何地方。

    StreamHandler

      标准输出stdout(如显示器)分发器

        创建方法:sh = logging.StreamHandler(stream=None)

    FileHandler

      将日志保存到磁盘文件的处理器。

      创建方法:fh=logging.FileHandler(filename, mode=‘a’,encoding=None, delay=False)

      setFormatter():设置当前handler对象使用的消息格式

  • Formatters格式

  Formatter对象用来最终设置日志信息的顺序、结构和内容

  其构造方法为

  Ft = logging.Formatter.__init__(fmt=None, datefmt=None, style=‘%’)

  Datefmt默认是%Y-%m-%d %H:%M:%S样式

  Style参数默认为百分符%,这表示%(<dictionary key>)s格式的字符串

 

使用文件配置处理日志

""" 配置文件的方式来处理日志"""
        # 载入配置文件的信息
        logging.config.fileConfig('logging.conf')

        rootLogger = logging.getLogger()
        rootLogger.debug("This is root Logger, debug")

        # 记录器
        logger = logging.getLogger('applog')

        logger.debug("This is applog, debug")

        a = 'abc'
        try:
            int(a)
        except Exception as e:
            logger.exception(e)

logging.conf文件配置:

[loggers]
keys=root,applog

[handlers]
keys=fileHandler,consoleHandler

[formatters]
keys=simpleFormatter

[logger_root]
level=DEBUG
handlers=consoleHandler

[logger_applog]
level=DEBUG
handlers=fileHandler,consoleHandler
qualname=applog
propagate=0

[handler_consoleHandler]
class=StreamHandler
args=(sys.stdout,)
level=DEBUG
formatter=simpleFormatter

[handler_fileHandler]
class=handlers.TimedRotatingFileHandler
args=('applog.log', 'midnight',1,0)
level=DEBUG
formatter=simpleFormatter

[formatter_simpleFormatter]
format=%(asctime)s|%(levelname)8s|%(filename)s[:%(lineno)d]|%(message)s
datefmt=%Y-%m-%d %H:%M:%S

参考链接:https://www.jb51.net/article/184398.htm

https://blog.csdn.net/qq_34182808/article/details/100735895

https://cloud.tencent.com/developer/section/1369394 ★

https://www.jb51.net/article/190556.htm ★

https://blog.csdn.net/yy19890521/article/details/80990175 

原文地址:https://www.cnblogs.com/leoych/p/14143049.html