import logging
import os
from logging import handlers
import time
class Logger(object):
level_mapping = {
'debug': logging.DEBUG,
'info': logging.INFO,
'warning': logging.WARNING,
'error': logging.ERROR,
'critical': logging.CRITICAL
} # 日志映射
def __init__(self, logs_dir, level='info', when='D', backCount=3,
fmt='%(asctime)s - [line:%(lineno)d] - %(levelname)s: %(message)s'):
self.logger = logging.getLogger(logs_dir)
# 设置格式
format_str = logging.Formatter(fmt)
# 设置级别
self.logger.setLevel(self.level_mapping.get(level))
# 关闭logger向上级传输
self.logger.propagate = False
# 流形式向屏幕输出
stream = logging.StreamHandler()
# 流的显示的格式
stream.setFormatter(format_str)
# 往文件里写入
file = handlers.TimedRotatingFileHandler(filename=logfilepath, when=when, backupCount=backCount,
encoding='utf-8')
# S 秒
# M 分
# H 小时
# D 天
# W 每星期(interval==0时代表星期一)
# midnight 凌晨
# 设置文件里写入的格式
file.setFormatter(format_str)
# 把对象加到logger里
self.logger.addHandler(stream)
# 把对象加到logger里
self.logger.addHandler(file)
def output():
"""
测试函数
:return:
"""
try:
# 以只读的方式打开一个文件,向文件中写入数据,会报错
# log日志信息:2020-04-01 10:28:38,214 - [line:124] - ERROR: not writable
fh = open("testfile.txt", "r")
fh.write("这是一个测试文件,用于测试异常!!")
except IOError as e:
log.logger.error(e)
def get_log_path(logs_dir):
"""
创建log日志文件文件名,以当前时间进行命名
:param logs_dir: 保存log日志文件的文件夹路径
:return: 拼接好的log文件名。格式:E:/log/twoGPU\selflog\2020-04-01.log
"""
# 创建文件目录
if os.path.exists(logs_dir) and os.path.isdir(logs_dir):
pass
else:
os.mkdir(logs_dir)
# 修改log保存位置
timestamp = time.strftime("%Y-%m-%d", time.localtime())
logfilename = '%s.log' % timestamp
logfilepath = os.path.join(logs_dir, logfilename)
return logfilepath
if __name__ == '__main__':
# 当前文件的绝对路径 进行 拼接
logs_dir = os.path.join(os.path.dirname(__file__), "selflog")
logfilepath = get_log_path(logs_dir)
# 日志存放位置
log = Logger(logs_dir=logs_dir)
output()
Python logging日志输出封装
最新推荐文章于 2022-11-26 16:40:06 发布