您的当前位置:首页>全部文章>文章详情

【C#】C# Winform 日志系统

CrazyPanda发表于:2024-02-18 22:37:30浏览:360次TAG:

目录

一、效果

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.刷新日志效果

01174706_63da351a96fff24847.gif

由于 gif 图片的问题,界面有点闪烁,真实效果要比这个流程的多。另一个也可以看出,快速的更新日志并没有什么问题。


2.单独日志的分类

我这里分了四个类型,可以根据分类查看单独的日志

01174706_63da351a96fff24847.gif


3.保存日志的样式

保存日志的目录

1.png

日志保存后的样式

1.png


二、概述

在我开发这个日志系统之前,我一直都是使用 Winform 自带的控制台作为日志系统,熟悉我文章的朋友都知道,我经常将 Winform 程序和控制台混和一起使用的,控制台输出日志确实非常方便,但它同时也有缺点,比如,在 Winform 程序运行后,任务栏会同时显示两个应用,控制台也算一个单独的程序,如果说单独运行一个 Winform 程序,还不会觉得有什么影响,但如果同时启动四五个 Winform 程序,那任务栏就基本全部被占满了,另一个,这个控制台还不能关闭,一关闭,就会连窗体程序一起关闭了,这还不算,如果你用 Winform 写一些小工具,放到 Window Server 服务器系统上,一打开程序,控制台会默认全屏,瞬间整个屏幕都是黑的,而且每次都得手动的去调整它的大小,非常的麻烦,后面我也不得不去开发一个日志系统,用的时候就把它打开,不用的时候就把它关闭,再次打开时,日志依然还在。


三、日志系统API

日志的界面用的是 ListView 开发的,另外加入了导出日志,和清理日志的功能,导出日志能导出 csv 格式的日志,办公软件或者记事本都可以查看。

1.png

在使用日志系统之前,请先安装 log4net,不然调用日志系统的接口会报错

1.png

log4 具体的用法,可以参考下面的例子:

C# Log4Net用法-CSDN博客

log4net.config 日志相关的配置如下:

<?xml version="1.0"?>
<configuration>
	<configSections>
		<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
	</configSections>
	<log4net>
		<!-- 错误日志类-->
		<logger name="logerror">
			<level value="ALL" />
			<appender-ref ref="ErrorAppender" />
		</logger>
		<!-- 信息日志类 -->
		<logger name="loginfo">
			<level value="ALL" />
			<appender-ref ref="InfoAppender" />
		</logger>
		<!-- 错误日志附加介质-->
		<appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
			<param name="File" value="Log\\LogError\\" />
			<param name="AppendToFile" value="true" />
			<param name="MaxSizeRollBackups" value="100" />
			<param name="MaxFileSize" value="10240" />
			<param name="StaticLogFileName" value="false" />
			<param name="DatePattern" value="yyyyMMdd&quot;.htm&quot;" />
			<param name="RollingStyle" value="Date" />
			<!--布局-->
			<layout type="log4net.Layout.PatternLayout">
			<param name="ConversionPattern" value="&lt;HR COLOR=red&gt;%n异常时间:%d [%t] &lt;BR&gt;%n异常级别:%-5p &lt;BR&gt;%n异 常 类:%c [%x] &lt;BR&gt;%n%m &lt;BR&gt;%n &lt;HR Size=1&gt;"  />
			</layout>
		</appender>
		<!-- 信息日志附加介质-->
		<appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
			<param name="File" value="Log\\LogInfo\\" />
			<param name="AppendToFile" value="true" />
			<param name="MaxFileSize" value="10240" />
			<param name="MaxSizeRollBackups" value="100" />
			<param name="StaticLogFileName" value="false" />
			<param name="DatePattern" value="yyyyMMdd&quot;.htm&quot;" />
			<param name="RollingStyle" value="Date" />
			<!-- 信息日志布局-->
			<layout type="log4net.Layout.PatternLayout">
			<param name="ConversionPattern" value="&lt;HR COLOR=blue&gt;%n日志时间:%d [%t] &lt;BR&gt;%n日志级别:%-5p &lt;BR&gt;%n日 志 类:%c [%x] &lt;BR&gt;%n%m &lt;BR&gt;%n &lt;HR Size=1&gt;"  />
			</layout>
		</appender>
	</log4net>
</configuration>

下面我介绍下日志系统的一些接口,源码的下载方式在文章的最后面



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,如下图

1.png

这是防止在多个程序中使用,分不清当前日志系统是哪一个程序的日志窗体。


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 官方差不多要拿一半左右,我这里其实没多少收益,或者你也可以通过打赏的方式(在文章的底部,csdn官方拿两成收益),付款后私信我。

如果对源码有疑问的欢迎私信我,我看到后会回复的。

下载地址:点击跳转


结束

如果这个帖子对你有所帮助,欢迎 关注 + 点赞 + 留言

end


原文链接C# Winform 日志系统_winform 日志打印显示-CSDN博客

猜你喜欢

【C#】C# Winform ListView用法
目录添加标题显示网格添加数据到表格中自定义其他属性结束添加标题在 Winfrom 界面中添加一个 ListView 组件,然后点击右上角的箭头,点击编辑列添加下面标题,然后点击确定此时 ListView 中还是一片空白,不能显示这些标题,在视图这里选择 Details就会如下图所示,虽然标题出来了,内容确实一块白版,此时还是觉得 DataGridView 组件好用啊显示网格此时,表格只是一片空白,可以在属性面板中设置,显示网格,如下图&nbsp;&nbsp;这时,就如下图所示,效果就出来了,但是
发表于:2024-01-31 浏览:367 TAG:
【C#】C# 自动更新(基于FTP)
目录一、前言二、功能的实现1.本地黑名单2.读取配置文件3.读取 FTP 文件列表4.读取本地文件5.匹配更新6.版本的切换三、环境搭建四、常见问题2023.12.30 更新结束效果启动软件后,会自动读取所有的 FTP 服务器文件,然后读取本地需要更新的目录,进行匹配,将 FTP 服务器的文件同步到本地Winform 界面一、前言在去年,我写了一个 C# 版本的自动更新,这个是根据配置文件 + 网站文件等组成的框架,以实现本地文件的新增、替换和删除,虽然实现了自动更新的功能,但用起来过于复杂,代
发表于:2024-02-03 浏览:342 TAG:
【C#】Winform解决方案打包成.exe 安装版Windows桌面应用程序
踩了几天的坑,慢慢爬出来了。帮助一下新手友人吧,高手请绕路。IDE Version:Visual Studio 20191.安装Microsoft Visual Studio Installer Project(1)打开Visual Studio 2019,扩展-&gt;管理扩展(2)搜索install,下载图中的扩展即可(我已经安装了,所以没有下载按钮)按照操作安装即可2.打包(1)右键 解决方案-&gt;添加-&gt;新建项目(2)搜索setup-&gt;选择 Setup Project-&amp;
发表于:2024-01-28 浏览:472 TAG:
【C#】C# Winform自动更新
目录一、需求二、更新文件列表生成器三、软件启动器1.判断是否需要更新2.文件下载3.执行 下载,覆盖,删除任务4.执行结果四、搭建更新服务器1.启动服务器2.新建项目本体3.给启动软件加密4.修改版本号五、整体测试1.生成更新文件2.软件更新3.下载最新的版本4.打开软件本体5.总结结束当前项目已停止维护,推荐使用 FTP 版自动更新C# 自动更新(基于FTP)_c# 程序自动升级-CSDN博客一、需求在Unity里面,有XLua,ILRuntime 这样的热更新框架,有Unity经验的人都知道
发表于:2024-02-01 浏览:338 TAG:
【C#】C# System.Windows.Forms.DataVisualization Demo案例
简介DataVisualization 其实就是Winform 中自带的 Chart 控件,整个图形控件主要由以下几个部份组成:1.Annotations --图形注解集合2.ChartAreas&nbsp; --图表区域集合3.Legends&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --图例集合4.Series  &nbsp; --图表序列集合(即图表数据对象集合)5.Titles   --图标的标题集合每个集合具体介绍,可以参考下面的帖子,看完了介绍,一定对你理解这个插件
发表于:2024-02-01 浏览:286 TAG:
【C#】从零开始用C#写一个桌面应用程序(二)一个表白程序
恶搞表白小程序如何添加按钮,如何添加属性和事件请移步前文。基础操作第一步:新建窗口&nbsp;&nbsp;在工具箱内找到label和button,拖到form上,设置它们的size属性,autosize属性,text属性。第二步:添加事件为了实现我们的效果,需要给三个按钮分别设计点击事件,鼠标移入事件,鼠标点下事件。分别为click,mouseenter,mousedown事件。第三步:实现移动逻辑this获取form对象,clientsize获取实时大小,使用随机数值,设置对应按钮位置。将对应
发表于:2024-01-30 浏览:294 TAG:
【C#】C# Winform 配置文件App.config
目录一、简介二、添加引用&nbsp;三、添加节点1.普通配置节点2.数据源配置节点四、管理类 ConfigHelper.cs1.获取配置节点2.更新或加入配置节点结束一、简介在C#中,配置文件很常用,ASP.NET 和 Winform 名称不同,用法一样,如下图config 文件通常用来存储一些需要修改的数据,比如用户名密码,连接数据库的IP地址等,而不是在代码中写死。有人可能会问,那我自己自定义一个配置文件也行,为什么要用它这个?区别当然有,微软自己封装的读取和写入会更简单一些,你自己封装的,
发表于:2024-01-31 浏览:374 TAG:
【C#】C# Winfrom 常用功能整合-1
目录Winform 最大化遮挡任务栏和全屏显示问题Winfrom 给图片画 矩形,椭圆形,文字Winfrom TabControl选项卡 动态添加,删除,修改Winform ErrorProvider控件Winform 读取Resources图片Winfrom 读取内存条占用大小,硬盘占用大小Winform 全局捕获异常Winform 用线程写入TXT文件,并更新UI和进度Winform 摄像头识别二维码,保存图片Winform 判断窗体是否已打开Winform 动态添加菜单列表,点击切换对应面
发表于:2024-02-02 浏览:397 TAG:
【C#】C# Winform GDI+ 绘图
目录一、概述二、绘图1.画直线2.画矩形3.画圆、圆弧4.画扇形5.画多边形6.绘制字符串7.填充图形结束一、概述Graphics类是GDI+技术的一个基本类。GDI+(Graphics Device Interface)是.NET框架的重要组成部分,提供对二维图形图像和文字排版处理的支持。GDI+相关的类分布在下列命名空间中: System.Drawing:提供了最基本的绘图功能(比如画直线、矩形、椭圆等); System.Drawing.Drawing2D: 提供了高级的二维和矢量绘图功能(
发表于:2024-02-18 浏览:379 TAG:
【C#】从零开始用C#写一个桌面应用程序(一)基础操作
准备winform应用程序编写桌面应用客户端的技术。xaml一种标记语言。winform程序组成。&nbsp;程序入口:&nbsp;form.cs和它的设计文件:&nbsp;&nbsp;启动的过程以及涉及的文件:main函数:&nbsp;form1的构造函数和它的设计文件:&nbsp;&nbsp;&nbsp; main-》构造form-》initializeComponent-》&nbsp;拖入一个 button控件可以看到:&nbsp;这时我们已经梳理启动过程。使用组件的方法&nbsp;可以在
发表于:2024-01-30 浏览:486 TAG: