WinForm(十四)窗體滾動日志

在桌面程序里,一般日志記錄到文件里就可以了,但有的時間,也需要在窗體上動態滾動顯示,這時,就需要引入日志框架了。

這里引入的依舊是NLog(在我的Mini API系統里,用的也是NLog)。首先要從Nuget中引入NLog.Windows.Forms,然后添加NLog.config,設置“始終復制”。

<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><OutputType>WinExe</OutputType><TargetFramework>net7.0-windows</TargetFramework><Nullable>enable</Nullable><UseWindowsForms>true</UseWindowsForms><ImplicitUsings>enable</ImplicitUsings></PropertyGroup><ItemGroup><PackageReference Include="NLog.Windows.Forms" Version="4.6.0" /></ItemGroup><ItemGroup><None Update="NLog.config"><CopyToOutputDirectory>Always</CopyToOutputDirectory></None></ItemGroup></Project>

下面是NLog的配置文件,有兩個Target和兩個Rules,第一個Target是基于RichTextBox控件的,也是在一個窗體中,放置一個RichTextBox控件,來滾動顯示輸出的日志,所以在這個Target配置中設置的有窗體的名字和這個RichTextBox控件的名字。

第二個是基于文件的,也就是日志不僅顯示在UI上,還同時寫一份到文件里,以便后查。(關于NLog框加的學習,請參考官網https://nlog-project.org)

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ><targets><target xsi:type="RichTextBox"name="richTextBoxLog"layout="${longdate}|${level:uppercase=true}|${logger}|${message}"height="30"autoScroll="true"maxLines="100"showMinimized="true"toolWindow="true"controlName="LogRichTextBox"formName="LogForm"width="50"useDefaultRowColoringRules="true"allowAccessoryFormCreation="true"messageRetention="None"      supportLinks="false">????</target><target name="logfile" xsi:type="File" fileName="${basedir}/logs/${date:format=yyyyMMdd}.txt" /></targets><rules><logger name="*" minlevel="Debug" writeTo="richTextBoxLog" /><logger name="*" minlevel="Debug" writeTo="logfile" /></rules>
</nlog>

下面是窗體寫了一個擴展方法,擴展了7個方法,當然可以按照自己需求進行擴展。另外,如果你在一些非窗體的類中寫日志,也可以參照進行擴展。

public static class LoggerExpand
{public static void LogInfo(this Form form, string message){_logger.Info(message);}public static void LogTrace(this Form form, string message){_logger.Trace(message);}public static void LogError(this Form form, string message){_logger.Error(message);}public static void LogDebug(this Form form, string message){_logger.Debug(message);}public static void LogFatal(this Form form, string message){_logger.Fatal(message);}public static void LogWarn(this Form form, string message){_logger.Warn(message);}public?static?void?Log(this?Form?form,?LogLevel?level,?string?message){_logger.Log(level, message);}static Logger _logger => LogManager.GetCurrentClassLogger();
}

本例設置的日志動態滾動顯示窗體是獨立的桌面,并不在主窗體中,所以在彈出日志窗體時,需要ReInitialize一下日志控件,如下第2行代碼,否則RichTextBox不會顯示日志。

var??_logForm?=?new?LogForm();
RichTextBoxTarget.ReInitializeAllTextboxes(_logForm);
_logForm.Show();

效果圖:

8ed6893c37ff4f45ed0ecbc55bd6e582.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/281428.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281428.shtml
英文地址,請注明出處:http://en.pswp.cn/news/281428.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

xp計算機找不到音量調節,WinXP電腦沒聲音且小喇叭不見了如何解決?

有用戶在使用電腦聽音樂的時候&#xff0c;突然發現電腦沒有聲音了&#xff0c;本來以為只是被禁了音&#xff0c;想著調節音量即可解決問題。但是當他想要點開音量小喇叭的時候&#xff0c;發現桌面任務欄通知區域的小喇叭不見了&#xff0c;這該怎么辦呢&#xff1f;下面小編…

2018-2019-1 20165211 實驗四 外設驅動程序設計

2018-2019-1 20165211 實驗四 外設驅動程序設計 任務一 1.實驗要求 學習資源中全課中的“hqyj.嵌入式Linux應用程序開發標準教程.pdf”中的第十一章 提交康奈爾筆記的照片&#xff08;可以多張&#xff09; 2. 任務完成 任務二 1. 實驗要求 在Ubuntu完成資源中全課中的“hqyj.嵌…

《ASP.NET Core 6框架揭秘》實例演示[31]:路由高階用法

ASP.NET的路由是通過EndpointRoutingMiddleware和EndpointMiddleware這兩個中間件協作完成的&#xff0c;它們在ASP.NET平臺上具有舉足輕重的地位&#xff0c;MVC和gRPC框架&#xff0c;Dapr的Actor和發布訂閱編程模式都建立在路由系統之上。Minimal API更是將提升到了前所未有…

java中文亂碼解決之道(五)—–java是如何編碼解碼的

編碼&解碼 1&#xff1a;I/O操作 2&#xff1a;內存 3&#xff1a;數據庫 4&#xff1a;javaWeb 下面主要介紹前面兩種場景&#xff0c;數據庫部分只要設置正確編碼格式就不會有什么問題&#xff0c;javaWeb場景過多需要了解URL、get、POST的編碼&#xff0c;servlet的解碼…

java反射--Class類

面向對象的世界里&#xff0c;萬事萬物皆對象。 1&#xff09;類是誰的對象呢&#xff1f; 類是對象&#xff0c;類是java.lang.Class類的實例對象。 2&#xff09;這個對象如何表示呢&#xff1f; package com.reflect;public class ClassDemo1 {public static void main(Stri…

win10系統按esc會彈出計算機,win10系統版本2004控制面板多出ESC是什么原因?

如果我們的電腦在升級了win102004控制面板多出ESC什么情況方法一&#xff1a;“干凈啟動”&#xff0c;排除第三方軟體的影響1.停止非核心的程序運作(包括第三方殺毒、優化軟體)2.情況允許的話&#xff0c;卸載設備中的第三方殺毒、管家、優化軟件3.同時按【4.點擊【服務】>…

CentOS6/7 配置守護進程

CentOS6.xCentOS6中轉用Upstrat代替以前的init.d/rcX.d的線性啟動方式。一、相關命令通過initctl help可以查看相關命令[rootlocalhost ~]# initctl help Job commands:start Start job.stop Stop job.restart …

Vue源碼解析之數組變異

力有不逮的對象 眾所周知&#xff0c;在 Vue 中&#xff0c;直接修改對象屬性的值無法觸發響應式。當你直接修改了對象屬性的值&#xff0c;你會發現&#xff0c;只有數據改了&#xff0c;但是頁面內容并沒有改變。 這是什么原因&#xff1f; 原因在于&#xff1a; Vue 的響應式…

linux守護進程的編寫

linux監控一個進程進行 代碼如下: #!/bin/shcd /home/autoprocess/ autopgrep -f autoProcessNew.php | wc -l if [ "$auto" 0 ] then nohup php autoProcessNew.php & fi 監視autoProcessNew.php,使他一直監視轉載于:https://www.cnblogs.com/matengfei123/p/…

微軟2014編程之美初賽第一場——題目3 : 活動中心

【來源】 題目3 : 活動中心 【分析】 本題採用的是三分法。 輸入的一組點中找出左右邊界。作為起始邊界。 while(右邊界-左邊界<精度){將左右邊界構成的線段均勻分成3段&#xff0c;推斷切割點的距離關系&#xff0c;抹去距離大的一段。更新左右邊界。 } 輸出左(右)邊界 【…

windows10計算機里輸入法,win10電腦上輸入法不見了怎么辦

好的輸入法可以加快我們的工作效率&#xff0c;當電腦上輸入法不見時&#xff0c;你會調出來嗎?下面小編告訴你win10電腦上輸入法不見時弄出來的一些訣竅吧。win10電腦上輸入法不見了的解決方法win10電腦上輸入法不見了的解決方法&#xff1a;Win10系統輸入法圖標不見了的找回…

Java并發(二十一):線程池實現原理

一、總覽 線程池類ThreadPoolExecutor的相關類需要先了解&#xff1a; &#xff08;圖片來自&#xff1a;https://javadoop.com/post/java-thread-pool#%E6%80%BB%E8%A7%88&#xff09; Executor&#xff1a;位于最頂層&#xff0c;只有一個 execute(Runnable runnable) 方法&a…

進程池

轉自&#xff1a;https://www.cnblogs.com/kaituorensheng/p/4465768.html 在利用Python進行系統管理的時候&#xff0c;特別是同時操作多個文件目錄&#xff0c;或者遠程控制多臺主機&#xff0c;并行操作可以節約大量的時間。當被操作對象數目不大時&#xff0c;可以直接利用…

gulp版本號管理插件注意事項

2019獨角獸企業重金招聘Python工程師標準>>> 打開node_modules\gulp-rev\index.js 第144行 manifest[originalFile] revisionedFile; 更新為: manifest[originalFile] originalFile ?v file.revHash; 打開node_modules\rev-path\index.js 第10行 return filena…

bigfile.to服務器位置,Cloudera Manager 遷移服務器

Cloudera Manager還是比較耗資源的&#xff0c;想把Cloudera Manager&#xff0c;移動到比較好的機器上。在這篇文章中&#xff0c;Cloudera Manager安裝在bigserver1上面&#xff0c;bigserver1是奔騰雙核的CPU。1&#xff0c;Cloudera Manager占資源比較多cloudera manager占…

vue定時ajax獲取數據,vue 中使用 AJAX獲取數據的方法

在VUE開發時&#xff0c;數據可以使用jquery和vue-resource來獲取數據。在獲取數據時&#xff0c;一定需要給一個數據初始值。看下例&#xff1a;new Vue({el:#app,data:{data:""},created:function(){var url"json.jsp";var _selfthis;$.get(url,function…

轉:shell awk

簡單使用&#xff1a; awk &#xff1a;對于文件中一行行的獨處來執行操作 。 awk -F &#xff1a;{print $1,$4} :使用‘&#xff1a;’來分割這一行&#xff0c;把這一行的第一第四個域打印出來 。 詳細介紹&#xff1a; AWK命令介紹 awk語言的最基本功能是在文件或字符串中基…

Mac使用crontab來實現定時任務

crontab 定時執行 配置文件都在/etc/crontab下&#xff0c;如果沒有就創建 語法&#xff1a; crontab [-e [UserName]|-l [UserName]|-r [UserName]|-v [UserName]|File ] 說明&#xff1a; crontab 是用來讓使用者在固定時間或固定間隔執行程序之用&#xff0c;換句話說&#…

前端技術周刊 2018-12-03:DOM

前端快爆 Chrome 71 開始將試用 SXG 功能&#xff0c;它是由 IETF 提出&#xff0c;Web Package 協議規范下的 Signed HTTP Exchanges 功能的縮寫。該技術使得一個第三方服務器可以直接向用戶提供可靠資源&#xff0c;且不用與原站共享 HTTPS 證書密鑰。?點評&#xff1a;一項…

公司新來了一位阿里P9,在全員大會上講葷段子!還是上個世紀的老段子,太爛了!...

阿里P9在坊間的名聲一向不好&#xff0c;這幾年在業界出了不少令人無語的新聞&#xff0c;今天又來了一個&#xff1a;公司新來了一位阿里P9偽高管&#xff0c;全員大會上來先講了一個葷段子&#xff0c;這個破段子還是上個世紀的&#xff0c;太爛了&#xff01;關于這個段子&a…