logging模块

我怕爱的太早我们不能终老 提交于 2020-02-16 10:37:09

logging日志模块

一、login可以显示的信息类型:

  • 调试信息:logging.debug('调试信息')
  • 基础信息:logging.info('基础信息')
  • 警告信息:logging.warning('警告信息')
  • 错误信息:logging.error('错误信息')
  • 严重错误信息:logging.critical('严重错误/批判信息')

    如果不做任何的设置,日志默认只会显示警告、错误和严重错误三类信息,不会显示调试信息和基础信息。

二、日志设置

配置分类:
- 基础配置:使用basicConfig()来设置,特点是:操作简单,但是可定制化不高
- 高级配置:创建对象等来设置,特点是:操作有难度,但是可定制化很高。

(一)、基础配置

  • 设置显示的日志需要在所有的信息类型之前添加logging.basicConfig()
    basicConfig()的基本的参数:

    • level 最低显示等级对应五种信息类型, 格式为:
      • level=logging.DEBUG
      • level=logging.INFO
      • level=logging.WARNING
      • level=logging.ERROR
      • level=logging.CRITICAL

        五个等级必须全部大写,在日常的工作中正常情况下最低的等级时INFO,除非是调试才会设置到DEBUG等级。

    • format日志输出内容格式化,具体的格式属性:
    字段/属性名称 使用格式 描述
    asctime %(asctime)s 日志事件发生的时间--人类可读时间,如:2003-07-08 16:49:45,896
    created %(created)f 日志事件发生的时间--时间戳,就是当时调用time.time()函数返回的值
    relativeCreated %(relativeCreated)d 日志事件发生的时间相对于logging模块加载时间的相对毫秒数(目前还不知道干嘛用的)
    msecs %(msecs)d 日志事件发生事件的毫秒部分
    levelname %(levelname)s 该日志记录的文字形式的日志级别('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL')
    levelno %(levelno)s 该日志记录的数字形式的日志级别(10, 20, 30, 40, 50)
    name %(name)s 所使用的日志器名称,默认是'root',因为默认使用的是 rootLogger
    message %(message)s 日志记录的文本内容,通过 msg % args计算得到的
    pathname %(pathname)s 调用日志记录函数的源码文件的全路径
    filename %(filename)s pathname的文件名部分,包含文件后缀
    module %(module)s filename的名称部分,不包含后缀
    lineno %(lineno)d 调用日志记录函数的源代码所在的行号
    funcName %(funcName)s 调用日志记录函数的函数名
    process %(process)d 进程ID
    processName %(processName)s 进程名称,Python 3.1新增
    thread %(thread)d 线程ID
    threadName %(thread)s 线程名称
    • 显示的日期格式:
      datefmt = '%a, %d, %b %Y %H:%M:%S'

    • 日志存储的文件名:
      格式为:filename = 'path+日志名'
      日志名:name.log, 后缀必须是log

      注意:如果添加filename = 'path+日志名',则往日志中添加,如果不写则是直接显示在屏幕上。

    • 日志文件的操作模式:
      格式为:filemode = 'a/w'

      注意:第一次创建日志文件的时候必须用w,一旦创建后必须改成a,如果不写这一条,默认模式是a。

import logging
logging.basicConfig(
    level=logging.INFO,
    format = '%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s %(message)s %(process)d',
    datefmt = '%a, %d, %b %Y %H:%M:%S',
    # 每一个参数之间必须用逗号隔开
    filename = '../第三方库/test.log',
    filemode = 'a'
    )

logging.debug('调试信息')
logging.info('基础信息')
logging.warning('警告信息')
logging.error('错误信息')
logging.critical('批判/严重错误信息')

'''
Sun, 16, Feb 2020 09:01:10 logging日志模块.py [line:17] INFO 基础信息 3434
Sun, 16, Feb 2020 09:01:10 logging日志模块.py [line:18] WARNING 警告信息 3434
Sun, 16, Feb 2020 09:01:10 logging日志模块.py [line:19] ERROR 错误信息 3434
Sun, 16, Feb 2020 09:01:10 logging日志模块.py [line:20] CRITICAL 批判/严重错误信息 3434

'''

注意:
使用基础配置方式的时候,logging.basicConfig()和loggin.debug/info/warning/error/critical()两者缺一不可,basicConfig()必须写在文件开头,第二个部分信息内容需要写在具体的程序中。

(二)、logger对象的形式操作日志文件

通过创建对象的方式来实现可定制化
具体的流程:

  • 创建logger对象:logger = logging.getLogger()

    根据需要可以创建多个对象

  • 创建文件管理对象符: fh = logging.FileHandler('logger对象.log', encoding='utf-8')
  • 设置显示日志信息的等级: logger.setLevel(logging.DEBUG/INFO/WARNING/ERROR/CRITICAL)
  • 创建屏幕管理操作符: sh = logging.StreamHandler()
  • 创建日志输出的格式(可以设置多个不同的格式): format = logging.Formatter('具体的显示格式')
  • 为上述四项建立联系
    • 文件管理对象符 绑定一个 格式: fh.setFormatter(format)
    • 屏幕管理对象符 绑定一个 格式: sh.setFormatter(format)
    • logger对象 绑定 文件操作管理符(可以绑定多个文件管理操作符):logger对象.addHandler(fh)
    • logger对象 绑定 屏幕操作管理符: logger对象.addHandler(sh)
  • 设置显示的信息:
    logger.debug('显示信息')
    logger.info('显示信息')
    logger.warning('显示信息')
    logger.error('显示信息')
    logger.critical('显示信息')

# 创建logger对象
logger = logging.getLogger()
logger1 = logging.getLogger()
# 设置日志显示等级
logger.setLevel(logging.DEBUG)
# 创建屏幕管理操作符
sh = logging.StreamHandler()

# 创建文件管理操作符
fh = logging.FileHandler('logger.log', encoding = 'utf-8')
fh1 = logging.FileHandler('logger1.log', encoding = 'utf-8')

# 创建日志输出的格式(可以设置多个不同的格式)
format1 = logging.Formatter('%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s %(message)s %(process)d')
format2 = logging.Formatter('%(asctime)s [line:%(lineno)d] %(levelname)s %(message)s %(process)d')
# 为上述四项建立联系
# 文件管理对象符 绑定一个 格式
fh.setFormatter(format1)
fh1.setFormatter(format2)
# 屏幕管理对象符 绑定一个 格式
sh.setFormatter(format2)
# logger对象 绑定 文件操作管理符(可以绑定多个文件管理操作符)
logger.addHandler(fh)
logger1.addHandler(fh1)
# logger对象 绑定 屏幕操作管理符
logger.addHandler(sh)


logger.debug('测试信息')
logger.info('测试信息')
logger.warning('测试信息')
logger.error('测试信息')
logger.critical('测试信息')

'''
# 文件:创建了logger.log和logger1.log

# 屏幕显示:
2020-02-16 09:55:06,050 [line:64] DEBUG 测试信息 5007
2020-02-16 09:55:06,052 [line:65] INFO 测试信息 5007
2020-02-16 09:55:06,052 [line:66] WARNING 测试信息 5007
2020-02-16 09:55:06,054 [line:67] ERROR 测试信息 5007
2020-02-16 09:55:06,055 [line:68] CRITICAL 测试信息 5007

'''

日志对象、文件操作管理符、屏幕操作管理符和日志格式都是可以设置多个的,设置几个根据需要来定

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!