logging日志
日志的基本了解
- 日志级别
日志记录级别的数值如图。如果你想要定义自己的级别,并且需要它们具有相对于预定义级别的特定值。如果你定义具有相同数值的级别,它将覆盖预定义的值;预定义的名称将失效。
- login 在代码中详细标注。避免log代码和日志输出混乱。我就另外建立了一个文件。
- 一共两个py文件。一个是file.py,另外一个是log.py
- 代码附件file.py
import os.path
def current_path(path: str):
"""
获取当前路径的方法
:param path: 文件路径比如"'../errorlogin/2022-11-20-18-52-39.text'"
:return: 绝对路径的字符串
"""
current_work_dir = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), path))
print(current_work_dir)
return current_work_dir
"""
pisj_1=os.path.abspath(__file__):是获取当前文件路径
wenjj=os.path.dirname(pisj):是获取当前文件夹路径
suerrsu=os.path.join(pjsj,wenjj):拼接成绝对路径
"""
def create_file(name: str):
"""
创建文件
:param name: 文件名称亦年月日
"""
path_1 = current_path('../file_log/' + name)
if not os.path.exists(path_1):
os.makedirs(path_1)
import logging
import time
from common import file
class Log():
def __init__(self):
"""
添加一个日志器
"""
self.logger = logging.getLogger()
self.logger.setLevel(logging.INFO)
def fomt(self):
"""
设置格式器
:return:tuple
"""
for1 = logging.Formatter(fmt='[%(name)s] [%(levelname)s] [%(asctime)s] ------->>>>[%(message)s ]')
for2 = logging.Formatter(fmt='[%(name)s] [%(levelname)s] [%(asctime)s] [%(filename)s]------->>>>'
'[%(message)s ]')
return for1, for2
def hand(self):
"""
添加一个处理器 控制台处理器输出 log
:return: 无
"""
h = logging.StreamHandler()
h.setLevel(logging.DEBUG)
h.setFormatter(self.fomt()[0])
self.logger.addHandler(h)
def add_file(self):
"""
设置 文件输出控制台
:param file_file: 文件名字
:return: 无
"""
year = "%Y-%m-%d"
hour = '%H-%M-%S'
year_str = time.strftime(year, time.localtime())
file.create_file(year_str)
time_log ='_' + time.strftime(year + " " + hour, time.localtime()) + '.log'
address = file.current_path('../file_log/' + year_str + '/' + time_log)
f = logging.FileHandler(filename=address, mode='w', encoding='UTF-8')
f.setLevel(logging.DEBUG)
f.setFormatter(self.fomt()[1])
self.logger.addHandler(f)
def global_1(self):
"""
初始化日志方法
:param file_1: 文件名称
:return: logger类
"""
self.hand()
self.add_file()
return self.logger
""" def add_time(self, file):
info日志处理器
# filename:日志文件名
# when:日志文件按什么维度切分。'S'-秒;'M'-分钟;'H'-小时;'D'-天;'W'-周
# 这里需要注意,如果选择 D-天,那么这个不是严格意义上的'天',而是从你
# 项目启动开始,过了24小时,才会从新创建一个新的日志文件,
# 如果项目重启,这个时间就会重置。所以这里选择'MIDNIGHT'-是指过了午夜
# 12点,就会创建新的日志。
# interval:是指等待多少个单位 when 的时间后,Logger会自动重建文件。
# backupCount:是保留日志个数。默认的0是不会自动删除掉日志。
# time自动生成文件时间
time_login = file + '_' + time.strftime('%Y-%m-%d-%H:%M:%S', time.localtime(time.time())) + '.log'
# 添加地址
address = pathp.current_path('../errorlogin/' + time_login)
self.d = TimedRotatingFileHandler(filename=address, when='MIDNIGHT', interval=1, backupCount=0,
encoding='utf-8')
self.d.setLevel(logging.DEBUG)
self.d.setFormatter(self.fomt()[1])
self.logger.addHandler(self.d)
"""