当前位置: 首页 > news >正文

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

相关文章:

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[]) …...

【Java 基础】27 XML 解析

文章目录 1.SAX 解析器1)什么是 SAX2)SAX 工作流程初始化实现事件处理类解析 3)示例代码 2.DOM 解析器1)什么是 DOM2)DOM 工作流程初始化解析 XML 文档操作 DOM 树 3)示例代码 总结 在项目开发中&#xff0…...

地图服务 ArcGIS API for JavaScript基础用法全解析

地图服务 ArcGIS API for JavaScript基础用法全解析 前言 在接触ArcGIS之前,开发web在线地图时用过Leaflet来构建地图应用,作为一个轻量级的开源js库,在我使用下来Leaflet还有易懂易用的API文档,是个很不错的选择。在接触使用Ar…...

docker学习(八、mysql8.2主从复制遇到的问题)

在我配置主从复制的时候,遇到了一直connecting的问题。 起初可能是我ip配置的不对,slave_io_running一直connecting。(我的环境:windows中安装了wsl,是ubuntu环境的,在wsl中装了miniconda,mini…...

React-hook-form-mui(三):表单验证

前言 在上一篇文章中,我们介绍了react-hook-form-mui的基础用法。本文将着重讲解表单验证功能。 react-hook-form-mui提供了丰富的表单验证功能,可以通过validation属性来设置表单验证规则。本文将详细介绍validation的三种实现方法,以及如何…...

【私域运营秘籍】4大用户调研方法,让你轻松掌握用户心理!

我们常说私域运营的核心是用户运营。根据二八法则,20%的超级用户贡献企业80%的利润。因此,企业应该根据用户的价值贡献来有针对性地进行运营。 然而,在实际的私域运营中,我们不仅需要找出贡献价值不同的用户,还可以从…...

2.8寸 ILI9341 TFTLCD 学习移植到STM32F103C8T6

2.8寸 ILI9341 TFTLCD 学习移植到STM32F103C8T6 文章目录 2.8寸 ILI9341 TFTLCD 学习移植到STM32F103C8T6前言第1章 LCD简介1.1 LCD硬件接口介绍 第2章 LCD指令介绍第3章 LCD 8080驱动方式3.1 8080写时序3.2 8080读时序 第4章 LCD 驱动代码部分4.1 修改代码部分4.2 代码工程下载…...

Java利用TCP实现简单的双人聊天

一、创建新项目 首先创建一个新的项目,并命名为聊天。然后创建包,创建两个类,客户端(SocketClient)和服务器端(SocketServer) 二、实现代码 客户端代码: package 聊天; import ja…...

软件压力测试的重要性与用途

在当今数字化的时代,软件已经成为几乎所有行业不可或缺的一部分。随着软件应用规模的增加和用户数量的上升,软件的性能变得尤为关键。为了确保软件在面对高并发和大负载时仍然能够保持稳定性和可靠性,软件压力测试变得至关重要。下面是软件压…...

【数据挖掘】国科大苏桂平老师数据库新技术课程作业 —— 第二次作业

1 设 F { A B → C , B → D , C D → E , C E → G H , G → A } F\{AB\rightarrow C,B\rightarrow D, CD\rightarrow E, CE\rightarrow GH, G\rightarrow A \} F{AB→C,B→D,CD→E,CE→GH,G→A},用推理的方法证明 F ∣ A B → G F\;|AB\rightarrow G F∣AB→…...

Qt + MySQL(简单的增删改查)

Qt编译MySql插件教程 帮助: SQL Programming QSqlDatabase 静态函数 1.drivers(),得到可以使用的数据库驱动名字的集合 [static] QStringList QSqlDatabase::drivers();2.addDatabase(),添加一个数据库实例 [static] QSqlDatabase QSql…...

postgresql设置免密登录

您提供的步骤描述了在 PostgreSQL 数据库环境中配置服务器间的 SSH 无密码登录和数据库用户认证的过程。这些步骤主要用于设置一个高可用性、负载平衡的数据库集群环境。让我们逐一解释这些步骤的目的和应用场景: 1. 启动 PostgreSQL 服务 systemctl start postgr…...

视频汇聚/音视频流媒体视频平台/视频监控EasyCVR分享页面无法播放,该如何解决?

国标GB28181安防视频监控/视频集中存储/云存储EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统…...

机器学习-逻辑回归

一、引言 逻辑回归(Logistic Regression)是一种广泛应用于分类问题的监督学习算法。尽管名字中含有“回归”二字,但这并不意味着它用于解决回归问题。相反,逻辑回归专注于解决二元或多元分类问题,如邮件是垃圾邮件还是…...

Edge调用Aria2下载

一、准备工作 1、Edge浏览器:Windows系统自带或点击下载;   2、Aria2 gui:点击github下载或自行搜索下载其他版本; 二、启动Aria2 gui 解压下载的Aria2 gui到任意目录,点击“Aria2c启动器”或“AriaNg启动器”皆可。…...

解密QQ号——C语言

题目: 有一串已加密的数字“6 3 1 7 5 8 9 2 4”解密规则:首先将第1个数字删除,紧接着将第2个数字放到这串数字的末尾,再将第3个数字删除并将第4个数字放到这串数字的末尾,再将第5个数删除 代码实现: #inc…...

三、jvm中的对象及引用

一、对象在jvm的创建过程 检查加载-->分配内存-->内存空间初始化-->设置-->对象初始化 1) 检查加载 首先检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查类是否已经被加载、解析和初始化过。 虚拟机遇到一条 new 指令时&#xf…...

Docker网络架构介绍

本文主要介绍了Docker容器的单机网络架构与集群网络架构,辅以演示,并简单介绍了网络管理中的命令。 前文: Docker的安装与简单操作命令-CSDN博客 docker网络原理介绍 与ovs类似,docker容器采用veth-pair linux bridge (虚拟交…...

Android studio新版本aar包导入项目中配置

目录 1、so、aar导入在项目build.gradle中配置 2、新版本迁移到setting.grade配置 1、so、aar导入在项目build.gradle中配置 repositories {flatDir {dirs libs} }2、新版本迁移到setting.grade配置 flatDir {dirs libs } 如下图所示 pluginManagement {repositories {gra…...

HBase-架构与设计

HBase架构与设计 一、背景二、HBase概述1.设计特点2.适用场景2.1 海量数据2.2 稀疏数据2.3 多版本数据2.4 半结构或者非结构化数据 三、数据模型1.表逻辑结构2.RowKey3.Column Family4.TimeStamp5.存储结构 四、HBase架构图1.Client2.Zookeeper3.HMaster4.HRegionServer5.HRegi…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...

条件运算符

C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层&#xf…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中&#xff0c;明确沟通敏捷转型目的尤为关键&#xff0c;团队成员只有清晰理解转型背后的原因和利益&#xff0c;才能降低对变化的…...