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

敌法师
• 阅读 1741
本文主要内容:
  • 创建一个基本日志类,实现将日志同时输出到控制台与写入文件的功能
  • 创建一个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'及以上的写入日志文件:

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类:

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

整理自网络,侵删。

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
4年前
RabbitMQ学习总结(6)——消息的路由分发机制详解
一、Routing(路由)(usingtheJavaclient)在前面的学习中,构建了一个简单的日志记录系统,能够广播所有的日志给多个接收者,在该部分学习中,将添加一个新的特点,就是可以只订阅一个特定的消息源,也就是说能够直接把关键的错误日志消息发送到日志文件保存起来,不重要的日志信息文件不保存在磁盘中,但是仍然能够在控制台输出,那么这便
Wesley13 Wesley13
4年前
JAVAEE——SpringBoot日志篇:日志框架SLF4j、日志配置、日志使用、切换日志框架
SpringBoot日志篇1、日志框架(故事引入)小张;开发一个大型系统;​1、System.out.println("");将关键数据打印在控制台;去掉?写在一个文件?​2、框架来记录系统的一些运行时信息;日志框架;zhanglogging.jar;​3、高大上的几
Stella981 Stella981
4年前
RabbitMQ 日志管理
日志默认输出位置如果我们是通过rpm方式进行安装的,那么系统默认会把日志放在/var/log/rabbitmq/目录下日志说明在日志目录/var/log/rabbitmq目录下,默认会有两类日志文件,一个是rabbit@{hostname}.log,另一个是rabbit@{hostname}sasl.log。
Stella981 Stella981
4年前
Linux——定时清空日志内容和删除日志文件
前言最近在做性能压测试,会生成大量的日志,导致后续越压越慢,最终磁盘空间占满之类的问题。老是要手动删除日志文件,为避免此类问题发生,编写一个Linux日志定时清理的脚本,一劳永逸。1、shell脚本创建脚本并赋权touch/home/mppay/autotruncatelog.shchmod u
Wesley13 Wesley13
4年前
Log4J.xml配置详解
Appender:日志输出器,配置日志的输出级别、输出位置等,包括以下几类:ConsoleAppender:日志输出到控制台;FileAppender:输出到文件;RollingFileAppender:输出到文件,文件达到一定阈值时,自动备份日志文件;DailyRollingFileAppender:可定
Stella981 Stella981
4年前
Shell 中常见的日志统计方法
前面我发布过"Hadoop兮,杀鸡别用牛刀,pythonshell实现一般日志文件的查询、统计(http://my.oschina.net/waterbear/blog/149881)",需要结合python,可能还是有一定的门槛,现将shell部分剥离出来.举例一些最基本的日志统计方法.(1)查看文件more craw
Stella981 Stella981
4年前
FastDFS运维友好那些事儿(二)
本文将介绍FastDFS体现运维友好性的另外两点功能和特性如下:.日志轮转和定期清除.binlog自动压缩和解压(V6.01支持的功能,已完成开发,即将发布) V4.02支持日志轮转和定期清除日志文件。日志轮转支持按天轮转和按文件大小轮转,定期清除是指删除N天前的日志文件,这两个特性默认是关闭的。  日志轮转和定
Stella981 Stella981
4年前
Linux用户行为日志审计
一:配置调试1.创建用户审计文件存放目录和审计日志文件;mkdirp/var/log/usermonitor/2.创建用户审计日志文件;echousermonitor/var/log/usermonitor/usermonitor.log3.将日志文件所有者赋予一个最低权限的用户;chownnobody:nobo
Stella981 Stella981
4年前
Linux下logrotate配置
logrotate程序是一个日志文件管理工具。用来把旧的日志文件更名或删除,并创建新的日志文件,我们把它叫做“转储”。是个使日志轮替的程序,有了它就不用看着自己的日志体积一天天的变大,而可以根据你自己的需求来设定日志转储。 ubuntu下logrotate配置文件路径:/etc/logrotate.conf /etc/logrota
Stella981 Stella981
4年前
LoggerOne
LoggerOne一个高效、简约、灵活高性能的遵循PSR3的PHP日志类库实现。特性天然的缓存特性(Logger实例属性),延迟批量写入。安装&使用Install$ composer require loggerone/loggerone默认的调用方式在默认情况下,Log
Stella981 Stella981
4年前
Python日志库logging总结
在部署项目时,不可能直接将所有的信息都输出到控制台中,我们可以将这些信息记录到日志文件中,这样不仅方便我们查看程序运行时的情况,也可以在项目出现故障时根据运行时产生的日志快速定位问题出现的位置。1、日志级别Python标准库logging用作记录日志,默认分为六种日志级别(括号为级别对应的数值),NOTSET(0)、DEBUG(10)