python基础之标准库logging日志

一、logging的基础运用

1. logging库日志级别

级别级别数值使用时机
DEBUG10详细信息,常用于调试
INFO20程序正常运行过程中产生的一些信息
WARNING30警告,虽然程序还在正常工作,但有可能发生错误
ERROR40由于更严重的问题,程序已经不能执行一些功能了
CRITICAL50严重错误,程序已不能继续运行

默认的日志级别是warning

导入logging模块

import logging

2. logging日志console中输出

# 默认的日志输出级别为warning,则warning,error,critical级别日志默认输出
# 若需要输出debug+info级别日志,可以调用basicConfig()方法,指定级别输出,如下:
logging.basicConfig(level=logging.DEBUG)
logging.debug('This debug log')
logging.info('This info log')
logging.warning('This warning log')
logging.error('This error log')
logging.critical('This critical log')

3. logging日志保存到指定文件中

# 若日志需要指定输出到某个文件中,则在logging.basicConfig()方法中加上filename参数即可,如下
logging.basicConfig(filename='demo.log', filemode='w', level=logging.DEBUG) 
#日志默认为追加模式,所以这里需要指定filemode='w',改成清空写入模式

4. 向日志输出变量

logging.basicConfig(level=logging.DEBUG)
#格式化输出
name='Txy'
old=22
logging.debug('my name is {}, I am {} years old'.format(name,old)) 
logging.debug(f'my name is {name}, I am {old} years old')

5. 设置日志输出格式和添加一些公共信息

asctime: 输出日志日期和时间---传入datefmt参数可以指定输出格式

levelname:输出日志级别

filename:输出生成日志的文件名

lineno:输出日志所针对的代码行号

message:输出具体的日志信息

logging.basicConfig(format="%(asctime)s|%(levelname)s|%(filename)s:%(lineno)s|%(message)s",datefmt="%Y-%m-%d %H:%M:%S",level=logging.DEBUG)

二、logging的高级应用

logging模块采用了模块化设计,主要包含四种组件:

Loggers:记录器,提供应用程序代码能直接使用的接口;

Handlers:处理器,将记录器产生的日志发送至目的地;

Filters:过滤器,提供更好的粒度控制,决定哪些日志会被输出;

Formatters:格式化器,设置日志内容的组成结构和消息字段。

 

 1. logger记录器

(1)提供应用程序的调用接口

logger = logging.getLogger(__name__)

logger是单例的

(2)决定日志打印的级别

logger.setLevel()

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

logger.addHandler() #记录器关联xx处理器
logger.removeHandler() #记录器移除关联xx处理器

2. Handlers处理器

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

StreamHandler 标准输出stdout分发器--控制台对象。

创建方法:

sh = logging.StreamHandler()

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

创建方法:

fh = logging.FileHandler(filename,mode='a',encoding=None,delay=False)

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

常用的Handlers处理器

  • StreamHandler
  • FileHandler
  • BaseRotatingHandler
  • RotatingFileHandler  # 根据文件大小切分日志
  • TimedRotatingFileHandler  # 基于时间的文件日志处理类,可以根据时间点和时间间隔来切分日志,如每天的0点,每两个小时。有其固定定义的几种类型

3. Formatters格式

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

其构造方法为

ft = logging.Formatter.__init__(fmt="%(asctime)s|%(levelname)s|%(filename)s:%(lineno)s|%(message)s",datefmt=None,style='%')
# datefmt默认是%Y-%m-%d %H:%M:%S样式的
# style参数默认为百分符%,这表示%(<dictionary key>)s格式的字符串

三、logging日志方法封装

import logging.handlers
import logging

def log_config(filename , when='midnight' , interval=1 , backup_count=7):
    """
    功能:初始化日志配置函数
    :param filename: 日志文件名
    :param when: 设定日志切分的间隔时间单位
    :param interval: 间隔时间单位的个数,指等待多少个 when 后继续进行日志记录
    :param backup_count: 保留日志文件的个数
    :return:
    """
    # 1. 创建日志器对象
    logger = logging.getLogger()

    # 2. 设置日志打印级别
    logger.setLevel(logging.INFO)
    # logging.DEBUG 调试级别
    # logging.INFO 信息级别
    # logging.WARNING 警告级别
    # logging.ERROR 错误级别
    # logging.CRITICAL 严重错误级别

    # 3. 创建处理器对象
    # 控制台对象
    sh = logging.StreamHandler()
    # 日志文件对象
    fh = logging.handlers.TimedRotatingFileHandler(filename ,
                                                   when=when ,
                                                   interval=interval ,
                                                   backupCount=backup_count ,
                                                   encoding='utf-8')

    # 4. 日志信息格式
    fmt = "%(asctime)s|%(levelname)s|%(filename)s:%(lineno)d|%(message)s"
    formatter = logging.Formatter(fmt)

    # 5. 给处理器设置日志信息格式
    sh.setFormatter(formatter)
    fh.setFormatter(formatter)

    # 6. 给日志器添加处理器
    logger.addHandler(sh)
    logger.addHandler(fh)


if __name__ == '__main__':
    # 初始化日志
    log_config('a.log')
    # 打印输出日志信息
    logging.debug('我是一个调试级别的日志')

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值