本文主要内容:
- 创建一个基本日志类,实现将日志同时输出到控制台与写入文件的功能
- 创建一个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
整理自网络,侵删。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。