C# Winform 日志系統

目錄

一、效果

1.刷新日志效果

2.單獨日志的分類

3.保存日志的樣式

二、概述

三、日志系統API

1.字段

Debug.IsScrolling

Debug.Version

Debug.LogMaxLen

Debug.LogTitle

Debug.IsConsoleShowLog

2.方法

Debug.Log(string)

Debug.Log(string, params object[])

Debug.Logs(string)

Debug.Logs(string, params object[])

Debug.LogSave(string)

Debug.LogSave(string, params object[])

Debug.Warning(string)

Debug.Warning(string, params object[])

Debug.Warnings(string)

Debug.Warnings(string, params object[])

Debug.Error(string)

Debug.Error(string, params object[])

Debug.Errors(string)

Debug.Errors(string, params object[])

Debug.ErrorSave(string)

Debug.ErrorSave(string, params object[])

Debug.ErrorSave(string, Exception)

Debug.ErrorSave(string, Exception, params object[])

Debug.Clear

Debug.Show

Debug.Show(int, int)

Debug.Show(Control)

Debug.Show(control, int, int)

結束


一、效果

1.刷新日志效果

由于 gif 圖片的問題,界面有點閃爍,真實效果要比這個流程的多。另一個也可以看出,快速的更新日志并沒有什么問題。

2.單獨日志的分類

我這里分了四個類型,可以根據分類查看單獨的日志

3.保存日志的樣式

保存日志的目錄

日志保存后的樣式

二、概述

在我開發這個日志系統之前,我一直都是使用 Winform 自帶的控制臺作為日志系統,熟悉我文章的朋友都知道,我經常將 Winform 程序和控制臺混和一起使用的,控制臺輸出日志確實非常方便,但它同時也有缺點,比如,在 Winform 程序運行后,任務欄會同時顯示兩個應用,控制臺也算一個單獨的程序,如果說單獨運行一個 Winform 程序,還不會覺得有什么影響,但如果同時啟動四五個 Winform 程序,那任務欄就基本全部被占滿了,另一個,這個控制臺還不能關閉,一關閉,就會連窗體程序一起關閉了,這還不算,如果你用 Winform 寫一些小工具,放到 Window Server 服務器系統上,一打開程序,控制臺會默認全屏,瞬間整個屏幕都是黑的,而且每次都得手動的去調整它的大小,非常的麻煩,后面我也不得不去開發一個日志系統,用的時候就把它打開,不用的時候就把它關閉,再次打開時,日志依然還在。

三、日志系統API

日志的界面用的是 ListView 開發的,另外加入了導出日志,和清理日志的功能,導出日志能導出 csv 格式的日志,辦公軟件或者記事本都可以查看。

在使用日志系統之前,請先安裝 log4net,不然調用日志系統的接口會報錯

下面我介紹下日志系統的一些接口,源碼的下載方式在文章的最后面

1.字段

Debug.IsScrolling

是否滾動日志,

public static bool IsScrolling { get; set; }

在日志界面打開后,有新的日志輸出時,是否自動向上滾動。

Debug.Version

日志的版本號

 public static string Version { get; private set; }

主要用來讀取當前 dll 的版本號

Debug.LogMaxLen

日志的最大長度

 public static int LogMaxLen { get; set; }

日志界面中顯示的日志最大行數,如果當前日志條數超過了最大長度,那么會自動移除最頂部的日志。

Debug.LogTitle

日志的標題

 public static string LogTitle { get; set; }

就是自定義窗體的 title,如下圖

這是防止在多個程序中使用,分不清當前日志系統是哪一個程序的日志窗體。

Debug.IsConsoleShowLog

是否在控制臺輸出

public static bool IsConsoleShowLog { get; set; }

雖然日志系統可以輸出日志,但是,如果你想同時在控制臺一起輸出,設置為 true 即可。

2.方法

Debug.Log(string)

在日志窗體中輸出普通日志,不會保存到本地

public static void Log(string message)

Debug.Log(string, params object[])

在日志窗體中輸出普通日志,不會保存到本地

public static void Log(string message, params object[] objs)

使用 params 可變參數,主要是考慮在字符串中加入各種參數的需求,比如打印這么一句

Debug.Log("用戶名:{0},狀態:{1}", "張三", "正常");

Debug.Logs(string)

在日志窗體中輸出普通日志,并將日志保存到本地

public static void Logs(string message)

和上面 Log 方法不同的是,這里只是在 Log 方法后面加了個 s,主要也是為了寫起來方便,不想方法的名字過于的長。

Debug.Logs(string, params object[])

在日志窗體中輸出普通日志,并將日志保存到本地

public static void Logs(string message, params object[] objs)

用法同?Debug.Log(string, params object[]) 一致。

Debug.LogSave(string)

不會在日志窗體中輸出日志,但會保存到本地

 public static void LogSave(string message)

這個方法的主要作用是保存日志,而不需要在日志窗體中輸出。

Debug.LogSave(string, params object[])

不會在日志窗體中輸出日志,但會保存到本地

public static void LogSave(string message, params object[] objs)

同上面方法一樣,主要用于字符串中的參數嵌套。

Debug.Warning(string)

在日志窗體中輸出異常日志,不會保存到本地

public static void Warning(string message)

和普通日志不同的是,異常日志在日志窗體中的圖標不同。

Debug.Warning(string, params object[])

在日志窗體中輸出異常日志,不會保存到本地

 public static void Warning(string message, params object[] objs)

異常日志的可變參數重載版本。

Debug.Warnings(string)

在日志窗體中輸出異常日志,并將日志保存到本地

public static void Warnings(string message)

Debug.Warnings(string, params object[])

在日志窗體中輸出異常日志,并將日志保存到本地

public static void Warnings(string message, params object[] objs)

異常日志的可變參數重載版本。

Debug.Error(string)

在日志窗體中輸出錯誤日志,不會保存到本地

public static void Error(string message)

Debug.Error(string, params object[])

在日志窗體中輸出錯誤日志,不會保存到本地

public static void Error(string message, params object[] objs)

Debug.Errors(string)

在日志窗體中輸出錯誤日志,并將日志保存到本地

public static void Errors(string message)

Debug.Errors(string, params object[])

在日志窗體中輸出錯誤日志,并將日志保存到本地

Debug.ErrorSave(string)

不會在日志窗體中輸出日志,但會保存到本地

public static void ErrorSave(string message)

和上面普通日志的區別是,在保存時顯示的日志類型是錯誤類型。

Debug.ErrorSave(string, params object[])

不會在日志窗體中輸出日志,但會保存到本地

public static void ErrorSave(string message, params object[] objs)

Debug.ErrorSave(string, Exception)

不會在日志窗體中輸出日志,但會保存到本地

public static void ErrorSave(string message, Exception ex)

能將 C# 運行時的異常保存到本地的日志中

Debug.ErrorSave(string, Exception, params object[])

不會在日志窗體中輸出日志,但會保存到本地

public static void ErrorSave(string message, Exception ex, params object[] objs)

能將 C# 運行時的異常保存到本地的日志中,日志能同時加入可變參數。

Debug.Clear

清除所有日志

 public static void Clear()

Debug.Show

顯示日志窗體(會受跨線程問題影響)

 public static void Show()

在UI線程調用,是不會受到線程問題的影響的,當前方法打開的日志窗體是一個默認的大小。

Debug.Show(int, int)

顯示日志窗體,并指定日志窗體的寬和高(會受跨線程問題影響)

 public static void Show(int width, int height)

在UI線程內調用不會受到影響。

Debug.Show(Control)

使用指定的控件線程來顯示日志窗體

public static void Show(System.Windows.Forms.Control control)

在UI線程內調用不會受到影響。

Debug.Show(control, int, int)

使用指定的控件線程來顯示日志窗體,并指定日志窗體的寬和高

public static void Show(System.Windows.Forms.Control control, int width, int height)

當前日志系統,我花了一段時間寫出來的,在工作中用了幾個月,在后面也是陸陸續續的更新,還是比較穩定的,代碼我沒有貼出來,有需要的可以去支持一下我。

在 csnd 出售資源是有分成的,csdn 官方差不多要拿一半左右,我這里其實沒多少收益,或者你也可以通過捐贈的方式(我主頁的置頂文章),付款后私信我。

如果對源碼有疑問的歡迎私信我,我看到后會回復的。

下載地址:點擊跳轉

結束

如果這個帖子對你有所幫助,歡迎 關注 + 點贊 + 留言

end

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

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

相關文章

數據結構之內部排序

目錄 7-1 直接插入排序 輸入格式: 輸出格式: 輸入樣例: 輸出樣例: 7-2 尋找大富翁 輸入格式: 輸出格式: 輸入樣例: 輸出樣例: 7-3 PAT排名匯總 輸入格式: 輸出格式: 輸入樣例: 輸出樣例: 7-4 點贊狂魔 輸入格式: 輸出格式: 輸入樣例&a…

RabbitMQ在國內為什么沒有那么流行?

MQ(消息隊列)的世界。MQ,就像是一個巨大的郵局,負責在不同服務或應用間傳遞消息。它可以幫助我們解耦系統,提高性能,還能做到異步處理和流量削峰。 基本使用 RabbitMQ是一個開源的消息代理和隊列服務器&a…

spring boot + uniapp 微信公眾號 jsapi 支付

后端支付類 package com.ruoyi.coupon.payment;import com.google.gson.Gson; import com.ruoyi.coupon.payment.dto.PayParamJsapiDto; import com.ruoyi.coupon.payment.dto.RefundParam; import com.ruoyi.coupon.service.ICouponConfigService; import com.wechat.pay.jav…

FFmpeg抽取視頻h264數據重定向

根據視頻重定向技術解析中的 截獲解碼視頻流的思路,首先需要解決如何輸出視頻碼流的問題。 目前只針對h264碼流進行獲取,步驟如下: 打開mp4文件并創建一個空文件用于存儲H264數據 提取一路視頻流資源 循環讀取流中所有的包(AVPacket),為…

redis中使用pipeline批量處理請求提升系統性能

在操作數據庫時,為了加快程序的執行速度,在新增或更新數據時,可以通過批量提交的方式來減少應用和數據庫間的傳輸次數;在redis中也有這樣的技術實現批量處理,也就是管道——Pipeline。它也是通過批量提交數據的方式來實…

線程安全3--wait和notify

文章目錄 wait and notify(等待通知機制notify補充 wait and notify(等待通知機制 引入wait notify就是為了能夠從應用層面上,干預到多個不同線程代碼的執行順序,這里說的干預,不是影響系統的線程調度策略&#xff08…

uni-app應用設置 可以根據手機屏幕旋轉進行 (橫/豎) 屏切換

首先 我們打開項目的 manifest.json 在左側導航欄中找到 源碼視圖 然后找到 app-plus 配置 在下面加上 "orientation": [//豎屏正方向"portrait-primary",//豎屏反方向"portrait-secondary",//橫屏正方向"landscape-primary",//橫屏…

第57天:django學習(六)

模版之過濾器 語法: {{obj|filter__name:param}} 變量名字|過濾器名稱:變量 default 如果一個變量是false或者為空,使用給定的默認值。否則,使用變量的值。例如: {{ value|default:"nothing"}} length …

IDEA啟動應用時報錯:錯誤: 找不到或無法加載主類 @C:\Users\xxx\AppData\Local\Temp\idea_arg_filexxx

IDEA啟動應用時報錯,詳細錯誤消息如下: C:\devel\jdk1.8.0_201\bin\java.exe -agentlib:jdwptransportdt_socket,address127.0.0.1:65267,suspendy,servern -XX:TieredStopAtLevel1 -noverify -Dspring.output.ansi.enabledalways -Dcom.sun.management…

基于以太坊的智能合約開發Solidity(事件日志篇)

//聲明版本號(程序中的版本號要和編譯器版本號一致) pragma solidity ^0.5.17; //合約 contract EventTest {//狀態變量uint public Variable;//構造函數constructor() public{Variable 100;}event ValueChanged(uint newValue); //事件聲明event Log(…

ElasticSearch之cat plugins API

命令樣例如下: curl -X GET "https://localhost:9200/_cat/plugins?vtrue&pretty" --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:ohCxPHQBEs5*lo7F9"執行結果輸出如下: name component version…

class064 Dijkstra算法、分層圖最短路【算法】

class064 Dijkstra算法、分層圖最短路【算法】 算法講解064【必備】Dijkstra算法、分層圖最短路 code1 743. 網絡延遲時間 // Dijkstra算法模版(Leetcode) // 網絡延遲時間 // 有 n 個網絡節點,標記為 1 到 n // 給你一個列表 times&…

法律服務網站建設效果如何

律師事務所及法律知識咨詢機構等往往是眾多人群需求的服務,服務多樣化及內容多元化,市場中也有大量品牌,在實際消費服務中大多以本地事務所為主,而線上咨詢服務則一般沒有區域限制,同行增多及人們知識獲取渠道增加&…

C++-引用和指針區別

文章目錄 1.變量的組成2.指針2.1 定義2.2 使用指針操作變量2.3 為什么使用指針 3.引用3.1 定義3.2 引用注意事項 4.引用和指針的區別 1.變量的組成 變量的組成:變量地址,變量名,變量值 例: int i 12;2.指針 2.1 定義 指針用于存…

如何為游戲角色3D模型設置紋理貼圖

在線工具推薦: 3D數字孿生場景編輯器 - GLTF/GLB材質紋理編輯器 - 3D模型在線轉換 - Three.js AI自動紋理開發包 - YOLO 虛幻合成數據生成器 - 三維模型預覽圖生成器 - 3D模型語義搜索引擎 當談到游戲角色的3D模型風格時,有幾種不同的風格&#xf…

Mybatis中的查詢操作

單表查詢 單表查詢在《初始Mybatis》中已經介紹過&#xff0c;這里就不在介紹了。咱們這里只說單表查詢中的“like查詢”。like查詢單獨使用#{}報錯 <select id"selectByKeyword" resultType"com.example.demo.entity.Userinfo">select * from use…

計網Lesson8 - NAT技術與鏈路層概述

文章目錄 NAT 技術1. 因特網的接入方式2. 公網和私網3. NAT 技術 鏈路層1. 數據鏈路層概述2. 數據鏈路層的三個問題2.1 封裝成幀2.2 透明傳輸2.3 差錯檢測 NAT 技術 1. 因特網的接入方式 光貓將電信號轉換為數字信號發送給路由器 光纖入戶 光纖傳遞的就是數字信號&#xff0c…

python+pytest接口自動化(12)-自動化用例編寫思路 (使用pytest編寫一個測試腳本)

經過之前的學習鋪墊&#xff0c;我們嘗試著利用pytest框架編寫一條接口自動化測試用例&#xff0c;來厘清接口自動化用例編寫的思路。 我們在百度搜索天氣查詢&#xff0c;會出現如下圖所示結果&#xff1a; 接下來&#xff0c;我們以該天氣查詢接口為例&#xff0c;編寫接口測…

錯題總結(三)

1.寫代碼將三個整數數按從大到小輸出。 例如&#xff1a; 輸入&#xff1a;2 3 1 輸出&#xff1a;3 2 1 int main() {int a 0;int b 0;int c 0;int tep 0;scanf("%d%d%d", &a, &b, &c);if (a < b){tep a;a b;b tep;}if (b < c){tep b…

每日一練2023.12.9—— 矩陣A乘以B【PTA】

題目鏈接&#xff1a;L1-048 矩陣A乘以B 題目要求&#xff1a; 給定兩個矩陣A和B&#xff0c;要求你計算它們的乘積矩陣AB。需要注意的是&#xff0c;只有規模匹配的矩陣才可以相乘。即若A有Ra?行、Ca?列&#xff0c;B有Rb?行、Cb?列&#xff0c;則只有Ca?與Rb?相等時&a…