WPF隨筆(十一) 日誌輸出到介面

2021-09-29 14:56:51 字數 2773 閱讀 9971

專案開發過程寫過幾個wpf的小工具,在使用過程中就需要把軟體執行的情況以日誌的形式輸出到介面上,這裡就把用過的幾種方式總結一下。

輸出到richtextbox很簡單直接了,**如下:

/// /// 日誌輸出

///

///

public void writetolog(string message)

string strtime = "[" + system.datetime.now.tostring("yyyy-mm-dd hh:mm:ss") + "] ";

if (txtrich.extentheight > 200)

}

其中txtrich就是介面ui上richtextbox的名稱,在需要輸出日誌的地方呼叫方法writetolog()即可。

上面的方法只能算是「偽日誌」,畢竟只是將資訊輸出到ui控制項上,正統的日誌還是要靠nlog、log4net這樣的日誌元件。

2.1.安裝nlog.config

開啟專案的nuget管理器,搜尋nlog.config並安裝。

其實只安裝nlog也是可以的。但是nlog.config已經包含了nlog,而且有了nlog.config編寫配置檔案更方便些。

2.2.配置nlog

nlog.config安裝成功後,專案跟目錄下會增加nlog.config和nlog.xsd兩個檔案。修改nlog.config檔案,對輸出日誌的格式、輸出形式、跟蹤級別進行配置。

<?xml version="1.0" encoding="utf-8" ?>

xmlns

=""xmlns:xsi

=""xsi:schemalocation

=" nlog.xsd"

autoreload

="true"

throwexceptions

="false"

internalloglevel

="off"

internallogfile

="c:\temp\nlog-internal.log"

>

name

="myvar"

value

="myvalue"

/>

>

輸出至檔案

-->

name

="info_file"

xsi:type

="file"

filename

="$/logs/$.log"

layout

="$ $} $"

/>

name

="error_file"

xsi:type

="file"

filename

="$/logs/$_error.log"

layout

="$ $} $ $"

/>

targets

>

>

name

="*"

minlevel

="info"

writeto

="info_file"

/>

name

="*"

minlevel

="error"

writeto

="error_file"

/>

rules

>

nlog

>

在**中定義日誌管理器,直接呼叫。

//定義日誌

private logger logger = logmanager.getcurrentclasslogger();

//呼叫日誌

private void btnlog_click(object sender, routedeventargs e)

啟動程式,在執行過程中產生的資訊就會輸出到指定目錄的檔案中。也可以通過修改配置檔案,將日誌輸出到其他目標位置。

將上述兩種方法結合起來,既可以在ui介面實時顯示,也能在後台穩定輸出。幸運的是可以使用nlog.wpf.richtextbox這個庫,雖然時間比較久遠了,但是用起來還是很方便的。開啟nuget管理器,安裝nlog.wpf.richtextbox。安裝完成後專案會增加wpfrichtextboxtarget.cs、wpfrichtextboxrowcoloringrule.cs、wpfrichtextboxwordcoloringrule.cs三個檔案,具體使用方法可以參考附帶的txt檔案。

在需要輸出日誌的地方修改**如下:

private void mainwindow_loaded(object sender, routedeventargs e)

] :: [$] :: $:$ :: $ $",

controlname = "你的控制項名稱",

formname = gettype().name,

autoscroll = true,

maxlines = 1000,

usedefaultrowcoloringrules = true,

};logmanager.reconfigexistingloggers();

});}

同樣是把日誌輸出到richtextbox,結合了上兩種方法,對於軟體執行的監測和問題檢查會有很大的幫助。

五月三十一日

花月的結束。明天就是六一了,兒童節哦,但是要體能測試。中間還有1000公尺。本來這也沒什麼,但是太久沒運動了,直接來個1000公尺恐怕還真吃不消,跑完跑及格是沒問題的,然而後遺症會很嚴重的,會幾天都難受。網路實踐的內容又往後做了一點,完成了vpn的架設,也完成了對路由的埠對映,開通了遠端桌面。遠端桌...

八月十一日 大霧

早上鬧鐘一直沒有響,當老於他們的手機響了以後,我覺得不對勁 已看手機,才發現手機已經關機了 手機又莫名其妙的關機了 飛快地洗漱完畢,騎車就飛馳到車站,還好,到公司的時候照樣早了20多分鐘 昨天終於發工資了,我的第乙份工資。本來我應該是興奮得,但是由於寶寶不開心,我也當然不開心了 其實我最不開心的不是...

五月十一日 課後總結

數論 重點 篩法 vector int ret for int i 2 i i x i while x i 0 if x 1 ret.push back x return ret 這個pushback就是推乙個數進到ret vector是stl資料標準庫里的乙個向量 但他既可以做陣列用也可以當鍊表使...