Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
提:
用python寫了一個簡單的log分析,主要也就是查詢一些key,value出來,后面也可以根據需求增加。查詢出來后,為了好看,搞個html 表格來顯示。
需要的組件: jinja2 flask 的模板。
先說下設計思路,主要是練習python代碼玩,高手略過
模擬scrapy,搞個管線
每個管線分預處理,分析器,和后處理。預處理的話,可以篩選下數據,分析器提取關鍵信息,然后把結果丟給后處理。html報表就是在后處理生成。
再搞個manger類,管理很多個管線,雖然現在單路pipeLine就完成了,說不定以后還能擴展呢。
我們可以定義預處理,比如過濾一些不關注的關鍵字,或者關注一些特定關鍵字的行
預處理的話,只處理QtiDCT-C關鍵字的日志行。
然后把經過預處理后的數據丟給分析器
主要查詢行數據行里面是否有keyword,然后根據分隔符,和結束符來提取內容
keyword delimiter xxxxxendwith 這樣個模式
獲取最終結果存儲到字典里面 result[keyword]=xxxx。這里會trim,去掉 \r\n.
這樣就有了結果集result.最后丟給posthandler 后處理。完成報表輸出。
后處理主要是用jinja2的模板,然后傳遞參數,生成最終的html文件。
這里的jinja_template.temple, 內容如下
有了模板,就可以在渲染模板的時候提供字典,變量,在模板里面顯示。最終完成報表的輸出。
最終使用
最終在main 方法中,通過-d參數傳入log所在目錄,然后迭代所有的文件,使用input 把文本文件轉換成行數據的list,丟給管線,最后把管線丟給manager,調用process ,完成txt日志的分析,到最后html的生產。
此文為大家推薦一些實用的JavaScript日志記錄庫,希望對大家在前端學習過程中有所幫助!
1、Conzole(對 JavaScript 原生 console 對象方法和功能進行封裝的 debug 面板,使其顯示在頁面內)
2、console.log-wrapper(將日志清晰地記錄到 console,且兼容所有瀏覽器)
3、loglevel(最輕量的 JavaScript 日志記錄工具庫,向封裝后可用的 console.log 方法增加可靠的日志等級)
4、minilog(輕量的、用流式 API 顯示的、可用于客戶端和服務器端的日志記錄庫)
5、log(帶有樣式的 Console.log)
6、DistributedLog (DL是一個高性能的日志復制服務,提供了持久化、復制以及強一致性的功能,這對于構建可靠的分布式系統都是至關重要的)
切版 qieban(.cn)
一節我們完成了基本的設置,應該說,至少目前對我來說,現在的功能已經基本夠用了。
于是我計劃從這篇文章開始,我就不再使用Word進行編輯了,用我這個私人日記軟件來編輯,實際驗證下是否實用。
如下圖,這是我之前教程的編寫模式:
之前也交待過,在word文檔中編輯,只要是包含了圖片的,復制后再粘貼到頭條都沒辦法成功,還需要把圖片一個個另外粘貼過去才行。如果是遇到gif動圖,從word復制只能復制靜態的截圖,還得再次復制原文件才能粘貼到頭條的編輯器中,操作起來比較麻煩。
于是我就在我的程序中嘗試復制粘貼,發現跟word是一樣的效果。這對我來說是不實用的,需要對它進行改造。
要解決這個問題,首先要分析下為什么會造成這種情況。我們使用的文本編輯控件是RichTextBox,這個默認是rtf格式的,跟word是一樣的。我們把帶圖文的內容粘貼到word文檔中,圖片就是可以正常顯示的。這就說明我們Ctrl+C的內容是rtf格式的,而不是通過瀏覽器粘貼能夠識別出來的格式。那么瀏覽器能夠識別的格式是不是每個瀏覽器特有的呢?于是我嘗試在FireFox中復制圖片和文字,粘貼到用Chrome打開的頭條編輯器,發現圖片是可以顯示的,上述的猜測可以排除了。那么這個格式究竟是怎樣的呢?我需要在程序中截獲一下粘貼的內容。在ContentManagerForm.cs文件中,添加鍵盤截獲事件,截獲Ctrl+V時的內容:
我們發現,如果從瀏覽器上按Ctrl+C,到我們的軟件中按Ctrl+V,用DataFormats.Html做參數可以取到值,值的內容大概是這樣:
前面紅線部分相當于信息頭,定義了一些參數,后面從<div>開始就是我們剛剛復制的內容了。我原封不動地將這些內容再寫回到剪貼板中,然后在瀏覽器中按Ctrl+V,瀏覽器也能夠正常顯示了。
這樣我們基本上就明白了,想要跟瀏覽器正常通訊,需要兩步:第一步是要將rtf格式轉換為html格式,第二步是要將html再轉換成瀏覽器能夠識別的格式到剪貼板。
一般這種格式轉換需要的工作量都比較大,自己從頭開發不大現實,需要網上找找看是否有現成的類庫。對比了幾家,找到了一個rftpipe的,而且是mit授權的。于是從Nuget獲取安裝,使用起來很容易:
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
string html = RtfPipe.Rtf.ToHtml(tbxMainBody.Rtf);
如此兩行代碼就實現了第一步的轉換。
同樣也是先網上查資料,找到了一個ClipboardHelper的類,同樣也是mit授權的。把代碼加入到工程,然后在ContentManagerForm中增加一個專門用于復制成html格式到剪貼板的按鈕:
按鈕處理代碼:
private void btnCopyAsHtml_Click(object sender, EventArgs e)
{
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
string html = RtfPipe.Rtf.ToHtml(tbxMainBody.Rtf);
ClipboardHelper.CopyToClipboard(html, "");
}
在使用了類庫的基礎上,三行代碼就完成了我想要的功能。
功能演示:
以上解決了從軟件復制到頭條的問題。
還有一種場景,就是把瀏覽器當成來源,從瀏覽器復制到軟件的功能。如果是純文本RichEdit編輯器自帶就支持,如果是圖文混排的,就需要從html到rtf的轉換,我找了一下相關的類庫,貌似沒有類似rftpipe這種免費且直接支持字符轉換的庫,很多都是通過文檔來轉換,而且還是收費的。好不容易找到一個符合要求的,結果這個項目比較老,是在Framework下開發的,不支持.netcore。
鑒于找到合適的庫有點困難,隨后仔細分析了下需求,其實這種從瀏覽器圖文混排復制到軟件的場景對我來說意義不大,通篇復制是不大可能的,關鍵位置復制文字做摘抄,真的有特別需要的圖片,單張截圖就好,所以這個功能暫時擱置吧。
這個小項目伴著教程做到了24節,終于有了一點實際作用了:)
----------------------------------------------------
本教程盡量保證2天一更,項目源碼已作為開源項目加入到Gitee,代碼內容會隨教程實時更新,大家有興趣的話可以關注我,以獲得最及時的更新。私信:
私人日記 可以獲取Gitee的鏈接;
sqlitestudio 可以獲取sqlitestudio的鏈接;
菜鳥 可以獲取菜鳥教程鏈接;
QQ群 可以獲取教程交流Q群號;
大家閱讀過程中有哪些看不懂或未盡興的地方,可以在評論區留言,我會先記下來在后續的教程中找機會再說。
教程有幫助的話請大家幫忙關注、轉發、擴散,能不能開專欄還需要你們的支持!
*請認真填寫需求信息,我們會在24小時內與您取得聯系。