python + Flask实现日志在web网页实时更新显示

一、日志输出到文件

使用模块: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

        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文件:

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'{_path}/log.log'
    with open(log_path,'rb') as f:
        log_size = path.getsize(log_path)
        offset = -100

        if log_size == 0:
            return ''
        while True:

            if (abs(offset) >= log_size):
                f.seek(-log_size, 2)
                data = f.readlines()
                return data

            data = f.readlines()

            if (len(data) > 1):
                return data
            else:
                offset *= 2

三、Flask创建一个web服务

flask是干啥的当下不做解释,有兴趣可以百度也可以等待我的更新嘎嘎,这里直接上步骤加代码,快速实现一个简单的web页面

1、目录下创建一个app.py文件输入下面代码


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()

    if len(log_data) - line_number[0] > 0:
        log_type = 2
        log_difference = len(log_data) - line_number[0]
        log_list = []

        for i in range(log_difference):
            log_i = log_data[-(i+1)].decode('utf-8')
            log_list.insert(0,log_i)
    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)

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

DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Titletitle>
    <style>
        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;
        }
    style>
head>
<body>
<button id="button" class="button">开始button>
<div class="log">
    <div class="log_text" id='log_list'>
        <div id="log_text">div>
    div>
div>
body>

<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js">script>
<script>
    var time

    function insertAfter( newElement, targetElement ){
        var parent = targetElement.parentNode;
        parent.appendChild( newElement, targetElement );
    };
    function log(){
        clearTimeout(time)
        var log_null = 0
        var div = document.getElementById('log_list')
        div.innerHTML = ""

        $.post('/generation_log',{},function (){
        })

        time = setInterval(function (){
            $.get('/get_log',{},function (data){
                if (data.log_type == 3){
                    log_null ++
                    if (log_null >= 5){
                        clearTimeout(time)
                    }
                    return
                }
                if (data.log_type == 2){
                    for (i=0;i<data.log_list.length;i++){
                        var p = document.createElement("p")
                        p.innerHTML = data.log_list[i]
                        var header = document.getElementById('log_text')
                        insertAfter(p,header)
                        div.scrollTop = div.scrollHeight
                    }
                    log_null = 0
                }

            })
        },1000)
    }
    document.getElementById('button').addEventListener("click",log)
script>
html>

四、启动服务

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

python + Flask实现日志在web网页实时更新显示

2、启动app.py文件

python + Flask实现日志在web网页实时更新显示

python + Flask实现日志在web网页实时更新显示

4、点击开始即可

python + Flask实现日志在web网页实时更新显示

Original: https://blog.csdn.net/liuage_/article/details/124062985
Author: liuage_
Title: python + Flask实现日志在web网页实时更新显示

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/744185/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球