目录
一、日志输出到文件
二、生成日志和读取日志
三、Flask创建一个web服务
四、启动服务
首页 后端开发 Python教程 如何使用python Flask实现日志在web网页实时更新显示

如何使用python Flask实现日志在web网页实时更新显示

May 17, 2023 am 11:07 AM
python web flask

一、日志输出到文件

使用模块:logging

可以生成自定义等级日志,可以输出日志到指定路径
日志等级:debug(调试日志) < info(重要信息日志) < warning(警告日志) < error(异常日志) < critical(严重错误)

1、封装日志输出方法()

import logging as lg
import os

class logging_():
    def __init__(path,delete=True)
        self.path = path #日志文件存放位置
        name = &#39;log.log&#39; #日志文件名称
        self.log_ = os.path.join(self.path,name) #进入文件目录
        if delete == True:
            open(f&quot;{path}/{name}&quot;,&quot;w&quot;).close #为True时清空文本
        # 创建一个日志处理器
        self.logger = lg.getLogger(&#39;logger&#39;)
        # 设置日志等级,低于设置等级的日志被丢弃
        self.logger.setLevel(lg.DEBUG)
        # 设置输出日志格式
        self.fmt = lg.Formatter(&quot;[%(asctime)s] - %(levelname)s: %(message)s&quot;,&quot;%Y-%m-%d %H:%M:%S&quot;)  
        # 创建一个文件处理器
        self.fh = lg.FileHandler(self.log_,encoding=&#39;utf-8&#39;)
        # 设置文件输出格式
        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__ == &#39;__main__&#39;:
    _path = os.paht.dirname(__file__) # 获取当前文件的路径
    lg = logging_(_path).logger # 实例化封装类
    lg.info(&#39;1111&#39;)
    lg.debug(&#39;2222&#39;)
    lg.error(&#39;33333&#39;)
    lg.warning(&#39;44444&#39;)
登录后复制

运行后输出内容,当前文件目录下多了一个log.log文件:

如何使用python Flask实现日志在web网页实时更新显示

日志内容:

如何使用python Flask实现日志在web网页实时更新显示

二、生成日志和读取日志

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&#39;{_path}/log.log&#39; # 获取日志文件路径
    with open(log_path,&#39;rb&#39;) as f:
        log_size = path.getsize(log_path) # 获取日志大小
        offset = -100
        # 如果文件大小为0时返回空
        if log_size == 0:
            return &#39;&#39;
        while True:
            # 判断offset是否大于文件字节数,是则读取所有行,并返回
            if (abs(offset) &gt;= log_size):
                f.seek(-log_size, 2)
                data = f.readlines()
                return data
            # 游标移动倒数的字节数位置
            data = f.readlines()
            # 判断读取到的行数,如果大于1则返回最后一行,否则扩大offset
            if (len(data) &gt; 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(&#39;/get_log&#39;,methods=[&#39;GET&#39;,&#39;POST&#39;])
def get_log():
    log_data = red_logs() # 获取日志
    # 判断如果此次获取日志行数减去上一次获取日志行数大于0,代表获取到新的日志
    if len(log_data) - line_number[0] &gt; 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(&#39;utf-8&#39;) # 遍历每一条日志并解码
            log_list.insert(0,log_i) # 将获取的日志存放log_list中
    else:
        log_type = 3
        log_list = &#39;&#39;
    # 已字典形式返回前端
    _log = {
        &#39;log_type&#39; : log_type,
        &#39;log_list&#39; : log_list
    }
    line_number.pop() # 删除上一次获取行数
    line_number.append(len(log_data)) # 添加此次获取行数
    return _log

# 通过前端请求执行生成日志方法
@app.route(&#39;/generation_log&#39;,methods=[&#39;GET&#39;,&#39;POST&#39;])
def generation_log_():
    if request.method == &#39;POST&#39;:
        generation_log()
    return &#39;&#39;

@app.route(&#39;/&#39;,methods=[&#39;GET&#39;,&#39;POST&#39;])
def index():
    if request.method == &#39;GET&#39;:
        return render_template(&#39;index.html&#39;)
    if request.method == &#39;POST&#39;:
        return render_template(&#39;index.html&#39;)

if __name__ == &quot;__main__&quot;:
    app.run(debug=True) #启动web服务
登录后复制

2、目录下创建一个templates目录

3、在templates目录下新建一个index.html文件,并输入下面前端代码

&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;title&gt;Title&lt;/title&gt;
    &lt;style&gt;
        body{
            margin: auto;
            background-color: #f5f5f5;
        }
        .button{width: 200px;height: 50px;color:#FFFFFF;background-color: #1da1f2}
        .log{
            width: 98%;
            height: 500px;
            background-color: #FFFFFF;
            margin: 0 auto;
            margin-top: 10px;
            padding-top: 30px;
            padding-bottom: 40px;
        }
        .log_text{
            height: 500px;
            margin-left: 80px;
            font-size: 18px;
            color: #111111;
            overflow-x: hidden;
            overflow-y: auto;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;button id=&quot;button&quot; class=&quot;button&quot;&gt;开始&lt;/button&gt;
&lt;div class=&quot;log&quot;&gt;
    &lt;div class=&quot;log_text&quot; id=&#39;log_list&#39;&gt;
        &lt;div id=&quot;log_text&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;/body&gt;

&lt;script src=&quot;http://libs.baidu.com/jquery/2.0.0/jquery.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;
    var time
      // 创建一个元素节点
    function insertAfter( newElement, targetElement ){ // newElement是要追加的元素targetElement 是指定元素的位置
        var parent = targetElement.parentNode; // 找到指定元素的父节点
        parent.appendChild( newElement, targetElement );
    };
    function log(){
        clearTimeout(time) // 清空定时器
        var log_null = 0 //存放空日志次数
        var div = document.getElementById(&#39;log_list&#39;) //找到存放日志的块
        div.innerHTML = &quot;&lt;div id=&#39;log_text&#39;&gt;&lt;/div&gt;&quot; // 每次跑清空div内内容

        $.post(&#39;/generation_log&#39;,{},function (){
        }) //请求生成日志接口
        // 生成定时器
        time = setInterval(function (){
            $.get(&#39;/get_log&#39;,{},function (data){ //请求获取日志接口获取日志
                if (data.log_type == 3){ //如果获取的是空日志log_null次数加1
                    log_null ++
                    if (log_null &gt;= 5){
                        clearTimeout(time) //如果连续10次获取的都是空日志清除定时任务
                    }
                    return
                }
                if (data.log_type == 2){ //如果获取到新日志
                    for (i=0;i&lt;data.log_list.length;i++){ //遍历日志
                        var p = document.createElement(&quot;p&quot;) //生成一个p标签
                        p.innerHTML = data.log_list[i] //日志存放到P标签内
                        var header = document.getElementById(&#39;log_text&#39;)
                        insertAfter(p,header) //将p标签添加到log_text div中
                        div.scrollTop = div.scrollHeight //滚动条实时显示到底部
                    }
                    log_null = 0 //日志为空次数清0
                }

            })
        },1000) //每1秒钟执行一次
    }
    document.getElementById(&#39;button&#39;).addEventListener(&quot;click&quot;,log) //点击开始按钮开始执行
&lt;/script&gt;
&lt;/html&gt;
登录后复制

四、启动服务

1、查看项目目录,代码是否编写齐全

如何使用python Flask实现日志在web网页实时更新显示

2、启动app.py文件

如何使用python Flask实现日志在web网页实时更新显示

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

如何使用python Flask实现日志在web网页实时更新显示

4、点击开始即可

如何使用python Flask实现日志在web网页实时更新显示

以上是如何使用python Flask实现日志在web网页实时更新显示的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章标签

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

模板化的优点和缺点有哪些? 模板化的优点和缺点有哪些? May 08, 2024 pm 03:51 PM

模板化的优点和缺点有哪些?

怎么下载deepseek 小米 怎么下载deepseek 小米 Feb 19, 2025 pm 05:27 PM

怎么下载deepseek 小米

Google AI 为开发者发布 Gemini 1.5 Pro 和 Gemma 2 Google AI 为开发者发布 Gemini 1.5 Pro 和 Gemma 2 Jul 01, 2024 am 07:22 AM

Google AI 为开发者发布 Gemini 1.5 Pro 和 Gemma 2

仅用250美元,Hugging Face技术主管手把手教你微调Llama 3 仅用250美元,Hugging Face技术主管手把手教你微调Llama 3 May 06, 2024 pm 03:52 PM

仅用250美元,Hugging Face技术主管手把手教你微调Llama 3

分享几个.NET开源的AI和LLM相关项目框架 分享几个.NET开源的AI和LLM相关项目框架 May 06, 2024 pm 04:43 PM

分享几个.NET开源的AI和LLM相关项目框架

deepseek怎么问他 deepseek怎么问他 Feb 19, 2025 pm 04:42 PM

deepseek怎么问他

evaluate函数怎么保存 evaluate函数怎么保存 May 07, 2024 am 01:09 AM

evaluate函数怎么保存

NET40是什么软件 NET40是什么软件 May 10, 2024 am 01:12 AM

NET40是什么软件

See all articles