您现在的位置是:网站首页> 编程资料编程资料
使用python+Flask实现日志在web网页实时更新显示_python_
                     2023-05-26
                169人已围观
                
                2023-05-26
                169人已围观
            
简介 使用python+Flask实现日志在web网页实时更新显示_python_
一、日志输出到文件
使用模块:logging
可以生成自定义等级日志,可以输出日志到指定路径
日志等级:debug(调试日志) < info(重要信息日志) < warning(警告日志) < error(异常日志) < critical(严重错误)
1、封装日志输出方法()
import logging as lg import os class logging_(): def __init__(path,delete=True) self.path = path #日志文件存放位置 name = 'log.log' #日志文件名称 self.log_ = os.path.join(self.path,name) #进入文件目录 if delete == True: open(f"{path}/{name}","w").close #为True时清空文本 # 创建一个日志处理器 self.logger = lg.getLogger('logger') # 设置日志等级,低于设置等级的日志被丢弃 self.logger.setLevel(lg.DEBUG) # 设置输出日志格式 self.fmt = lg.Formatter("[%(asctime)s] - %(levelname)s: %(message)s","%Y-%m-%d %H:%M:%S") # 创建一个文件处理器 self.fh = lg.FileHandler(self.log_,encoding='utf-8') # 设置文件输出格式 self.fh.setFormatter(self.fmt) # 将文件处理器添加到日志处理器中 self.logger.addHandler(self.fh) # 创建一个控制台处理器 self.sh=lg.StreamHandler() # 设置控制台输出格式 self.sh.setFormatter(self.fmt) # 将控制台处理器添加到日志处理器中 self.logger.addHandler(self.sh) # 关闭文件 self.fh.close() # 使用 if __name__ == '__main__': _path = os.paht.dirname(__file__) # 获取当前文件的路径 lg = logging_(_path).logger # 实例化封装类 lg.info('1111') lg.debug('2222') lg.error('33333') lg.warning('44444') 运行后输出内容,当前文件目录下多了一个log.log文件:

日志内容:

二、生成日志和读取日志
1、新建一个py文件(generation_log),文件名自定,
2、直接上代码
# 导入上面封装好的日志输出 from logging.demo_01 import logging_ import os,time _path = os.path.dirname(__file__) # 获取当前文件路径 lg = logging_(_path) # 实例化类 # 创建方法生成日志 def generation_log(): for i in range(20): lg.info(i) time.sleep(1) # 读取日志并返回 def red_logs(): log_path = f'{_path}/log.log' # 获取日志文件路径 with open(log_path,'rb') as f: log_size = path.getsize(log_path) # 获取日志大小 offset = -100 # 如果文件大小为0时返回空 if log_size == 0: return '' while True: # 判断offset是否大于文件字节数,是则读取所有行,并返回 if (abs(offset) >= log_size): f.seek(-log_size, 2) data = f.readlines() return data # 游标移动倒数的字节数位置 data = f.readlines() # 判断读取到的行数,如果大于1则返回最后一行,否则扩大offset if (len(data) > 1): return data else: offset *= 2 三、Flask创建一个web服务
flask是干啥的当下不做解释,有兴趣可以百度也可以等待我的更新嘎嘎,这里直接上步骤加代码,快速实现一个简单的web页面
1、目录下创建一个app.py文件输入下面代码
#导入flask模块 from flask import Flask,request,render_template # 导入日志生成和日志返回方法 from study.logging.generation_log import generation_log,red_logs app = Flask(__name__) line_number = [0] #存放当前日志行数 # 定义接口把处理日志并返回到前端 @app.route('/get_log',methods=['GET','POST']) def get_log(): log_data = red_logs() # 获取日志 # 判断如果此次获取日志行数减去上一次获取日志行数大于0,代表获取到新的日志 if len(log_data) - line_number[0] > 0: log_type = 2 # 当前获取到日志 log_difference = len(log_data) - line_number[0] # 计算获取到少行新日志 log_list = [] # 存放获取到的新日志 # 遍历获取到的新日志存放到log_list中 for i in range(log_difference): log_i = log_data[-(i+1)].decode('utf-8') # 遍历每一条日志并解码 log_list.insert(0,log_i) # 将获取的日志存放log_list中 else: log_type = 3 log_list = '' # 已字典形式返回前端 _log = { 'log_type' : log_type, 'log_list' : log_list } line_number.pop() # 删除上一次获取行数 line_number.append(len(log_data)) # 添加此次获取行数 return _log # 通过前端请求执行生成日志方法 @app.route('/generation_log',methods=['GET','POST']) def generation_log_(): if request.method == 'POST': generation_log() return '' @app.route('/',methods=['GET','POST']) def index(): if request.method == 'GET': return render_template('index.html') if request.method == 'POST': return render_template('index.html') if __name__ == "__main__": app.run(debug=True) #启动web服务 2、目录下创建一个templates目录
3、在templates目录下新建一个index.html文件,并输入下面前端代码
Title 
四、启动服务
1、查看项目目录,代码是否编写齐全

2、启动app.py文件

3、访问本地连接:http://127.0.0.1:5000/

4、点击开始即可

总结
到此这篇关于使用python+Flask实现日志在web网页实时更新显示的文章就介绍到这了,更多相关python Flask实现日志实时显示内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
您可能感兴趣的文章:
                
                
相关内容
- python3中_from...import...与import ...之间的区别详解(包/模块)_python_
- Python from import导包ModuleNotFoundError No module named找不到模块问题解决_python_
- 使用flask如何获取post请求参数_python_
- 详解Python变量与注释高级用法_python_
- 如何使用draw.io插件在vscode中一体化导出高质量图片_python_
- 保姆级官方yolov7训练自己的数据集及项目部署详解_python_
- Python中的闭包使用及作用_python_
- Python使用Asyncio进行web编程方法详解_python_
- Python Color类与文字绘制零基础掌握_python_
- Python+OpenCV实现表面缺陷检测_python_
 
                                
                                                         
                                
                                                         
                                
                                                         
 
    