<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
使用模組: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頁面
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檔案,並輸入下面前端程式碼
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <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 ){ // 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 = "<div id='log_text'></div>" // 每次跑清空div內內容 $.post('/generation_log',{},function (){ }) //請求生成紀錄檔介面 // 生成定時器 time = setInterval(function (){ $.get('/get_log',{},function (data){ //請求獲取紀錄檔介面獲取紀錄檔 if (data.log_type == 3){ //如果獲取的是空紀錄檔log_null次數加1 log_null ++ if (log_null >= 5){ clearTimeout(time) //如果連續10次獲取的都是空紀錄檔清除定時任務 } return } if (data.log_type == 2){ //如果獲取到新紀錄檔 for (i=0;i<data.log_list.length;i++){ //遍歷紀錄檔 var p = document.createElement("p") //生成一個p標籤 p.innerHTML = data.log_list[i] //紀錄檔存放到P標籤內 var header = document.getElementById('log_text') insertAfter(p,header) //將p標籤新增到log_text div中 div.scrollTop = div.scrollHeight //卷軸實時顯示到底部 } log_null = 0 //紀錄檔為空次數清0 } }) },1000) //每1秒鐘執行一次 } document.getElementById('button').addEventListener("click",log) //點選開始按鈕開始執行 </script> </html>
1、檢視專案目錄,程式碼是否編寫齊全
2、啟動app.py檔案
3、存取本地連線:http://127.0.0.1:5000/
4、點選開始即可
到此這篇關於使用python+Flask實現紀錄檔在web網頁實時更新顯示的文章就介紹到這了,更多相關python Flask實現紀錄檔實時顯示內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45