python面试题001-写一个基本日志类,同时将日志显示在控制台和写入文件中,并按照天为周期切分为日志文件

本文主要内容:
  • 建立一个基本日志类,实现将日志同时输出到控制台与写入文件的功能
  • 建立一个Student类,score属性只能为整数。实例化Student类,给score赋不一样的值,从而验证基本日志类的功能

建立基本日志类:网络

import logging
from logging import handlers


FORMAT = '%(acstime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s - %(message)s'
# 设置日志格式

class Logger(object):
    # 日志级别关系映射
    kv = {
 'debug': logging.DEBUG,
    'info': logging.INFO,
    'warning': logging.WARNING,
    'error': logging.ERROR,
    'crit': logging.CRITICAL
} 
    def __init(self, filename, level='info', when='D', backcount=3, fmt=FORMAT):
    """
    :param filename: 写入日志的文件名
    :param level: 日志级别
    :param when: 日志切分周期
    :param backcount: 每完成一个周期的日志写入文件,最多保留的     日志文件数,旧的日志文件将被删除
    :param fmt: 日志格式
    """
    
    self.logger = logging.getLogger(filename) 
    fmt_str = logging.Formatter(fmt)  # 日志格式
    self.logger.setLevel(self.kv.get(level))  # 日志级别
    
    sh = logging.StreamHandler()  # 输出到控制台
    sh.setFormatter(fmt_str)  #  日志在控制台的输出格式
    
    th = handlers.TimedRotatingFileHandler(filename, when=when, backupCount=backupcount, encoding='utf-8')
    th.setFormatter(fmt_str)
    
    self.logger.addHandler(sh)
    self.logger.addHandler(th)

建立log对象,日志级别为'DEBUG'及以上的写入日志文件:debug

log = Logger(filename='all.log', level='debug').logger

建立Student类,属性score只能为整数类型:日志

class Student(object):
    def __init__(self, name, id):
        self.name = name
        self.id = id
        log.info(f'{student name:{name}, id:{id}}')
    
    @property
    def score(self):
        return self.__score
        
    @score.setter
    def score(self, score):
        if isinstance(score, int)
        self.__score = score
        log.info(f'{student {name} got {self.score}}')
        else:
            log.error(f'学生分数类型错误,应该为整型!')
            raise TypeError(f'学生分数类型错误,应该为整型!')

实例化Student类:code

xiaoming = Student(10086, 'xiaoming')
xiaoming.score = 90
xiaohong = Student(10010, 'xiaohong')
xiaohong.score = 90.6

整理自网络,侵删。orm