【C#】C# Winform 日志系统
目录
Debug.Log(string, params object[])
Debug.Logs(string, params object[])
Debug.LogSave(string, params object[])
Debug.Warning(string, params object[])
Debug.Warnings(string, params object[])
Debug.Error(string, params object[])
Debug.Errors(string, params object[])
Debug.ErrorSave(string, params object[])
Debug.ErrorSave(string, Exception)
Debug.ErrorSave(string, Exception, params object[])
一、效果
1.刷新日志效果
由于 gif 图片的问题,界面有点闪烁,真实效果要比这个流程的多。另一个也可以看出,快速的更新日志并没有什么问题。
2.单独日志的分类
我这里分了四个类型,可以根据分类查看单独的日志
3.保存日志的样式
保存日志的目录
日志保存后的样式
二、概述
在我开发这个日志系统之前,我一直都是使用 Winform 自带的控制台作为日志系统,熟悉我文章的朋友都知道,我经常将 Winform 程序和控制台混和一起使用的,控制台输出日志确实非常方便,但它同时也有缺点,比如,在 Winform 程序运行后,任务栏会同时显示两个应用,控制台也算一个单独的程序,如果说单独运行一个 Winform 程序,还不会觉得有什么影响,但如果同时启动四五个 Winform 程序,那任务栏就基本全部被占满了,另一个,这个控制台还不能关闭,一关闭,就会连窗体程序一起关闭了,这还不算,如果你用 Winform 写一些小工具,放到 Window Server 服务器系统上,一打开程序,控制台会默认全屏,瞬间整个屏幕都是黑的,而且每次都得手动的去调整它的大小,非常的麻烦,后面我也不得不去开发一个日志系统,用的时候就把它打开,不用的时候就把它关闭,再次打开时,日志依然还在。
三、日志系统API
日志的界面用的是 ListView 开发的,另外加入了导出日志,和清理日志的功能,导出日志能导出 csv 格式的日志,办公软件或者记事本都可以查看。
在使用日志系统之前,请先安装 log4net,不然调用日志系统的接口会报错
log4 具体的用法,可以参考下面的例子:
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".htm"" /> <param name="RollingStyle" value="Date" /> <!--布局--> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="<HR COLOR=red>%n异常时间:%d [%t] <BR>%n异常级别:%-5p <BR>%n异 常 类:%c [%x] <BR>%n%m <BR>%n <HR Size=1>" /> </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".htm"" /> <param name="RollingStyle" value="Date" /> <!-- 信息日志布局--> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="<HR COLOR=blue>%n日志时间:%d [%t] <BR>%n日志级别:%-5p <BR>%n日 志 类:%c [%x] <BR>%n%m <BR>%n <HR Size=1>" /> </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,如下图
这是防止在多个程序中使用,分不清当前日志系统是哪一个程序的日志窗体。
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 NanUI 0.77版本 JS和C#相互调用
- 目录一、导入插件二、常用方法三、C#和JS相互调用1.C# 调用JS2.JS调用C#方法3.完整版C#代码4.完整版JS代码结束一、导入插件用的NanUI版本0.77参考官方地址:https://docs.formium.net/zh-hans/tutorial/first-app.html二、常用方法基础代码:using NetDimension.NanUI; using NetDimension.NanUI.Browser; class MainW
- 【C#】C# Winfrom 常用功能整合-2
- 目录Winfrom 启动一个外部exe文件,并传入参数Winform ListBox用法HTTP下载文件(推荐)Winform HTTP下载并显示进度Winform HTTP下载文件Winform 跨线程访问UI组件Winform 改变文字的颜色和大小Winfrom 启动一个外部exe文件,并传入参数在我们常用的一些软件中,经常有些软件,双击之后根本打不开,这是因为启动时做了限制,我们需要传入一些参数才能打开,在工作中,这个需求也可以用在软件的自动更新上,
- 【C#】c#Windows桌面程序退入托盘及右键菜单
- 一. 退出托盘功能窗体加组件notifyIcon修改属性,属性中加入要在托盘显示时呈现的图标。添加MouseClick事件编辑代码:private void Form_Main_FormClosing(object sender, FormClosingEventArgs e) { e.Cancel = true; this.Hid
- 【C#】从零开始用C#写一个桌面应用程序(二)一个表白程序
- 恶搞表白小程序如何添加按钮,如何添加属性和事件请移步前文。基础操作第一步:新建窗口 在工具箱内找到label和button,拖到form上,设置它们的size属性,autosize属性,text属性。第二步:添加事件为了实现我们的效果,需要给三个按钮分别设计点击事件,鼠标移入事件,鼠标点下事件。分别为click,mouseenter,mousedown事件。第三步:实现移动逻辑this获取form对象,clientsize获取实时大小,使用随机数值,设置对应按钮位置。将对应
- 【C#】C# Winfrom 右键菜单
- 目录一、概述二、新建 winform 项目三、给图片控件添加右键菜单四、给菜单添加点击事件五、测试结束一、概述ContextMenuStrip 是 Windows 窗体应用程序中的一个控件,它提供了一个弹出菜单,用于在用户右键单击控件或其他界面元素时显示上下文相关的选项。它通常用于在图形用户界面中提供快捷操作和功能。ContextMenuStrip 控件可以通过在 Visual Studio 的设计器中拖放方式添加到窗体上,或者通过编程方式创建和配置。它可以与其他控件(如按钮、文本框等
- 【C#】Winform NanUI 0.88版本 JS和C#相互调用
- 目录一、需求版本二、实例JS调用C#注册的只读属性JS调用C#注册的字段JS调用C#注册的同步方法JS调用C#注册的异步方法C#注册一个方法,JS调用并传递参数C#注册一个方法,JS调用并接收C#返回值C#注册一个方法,接收JS的数组参数C#注册一个方法,接收JS的一个函数,执行这个JS函数,并将C#的值传递过去三、结束一、需求在软件的界面和软件逻辑分离后,最重要的就是要处理参数的传递,和函数的调用,因此存在JS中和C#相互调用的需求。版本NanUI 版本:0.8.80.191二、实例using
- 【C#】Winform NanUI 0.77版本 读取本地资源(扩展功能)
- 一、前言在NanUI官方的文档中,原本是有一个NanUI.FileResourceHandler的扩展包的,但现在官方已经无法下载了,现在只有0.88版本中有一个NanUI.LocalFileResource程序包,而0.77版本只剩下了一个读取嵌入式资源的程序包。关于NanUI:NanUI | .Net/.Net Core界面组件NanUI 0.7版正式发布 - 林选臣 - 博客园在扩展功能之前,请参考[资源处理器]-04 自定义资源处理器 - 知乎 ,我参考这个帖子进行扩展的,也不
- 【C#】Winform NanUI 0.88版本 用官方源码搭建原生态开发环境
- 目录一、需求二、搭建原生开发环境1.导入源码2.解决源码报错错误1错误23.导入其他项目4.官方Demo运行效果三、创建自己的NanUI项目1.新建项目2.导入NanUI.Runtime扩展包3.添加NanUI程序集的引用4.MainIndex主界面相关代码5.Program程序入口相关代码6.读取本地前端文件的处理四、测试项目效果五、结束一、需求NanUI 插件确实很方便,但想改其中的需求怎么办,下面就来自己搭建NanUI 原生开发环境,在此很感谢作者免费的开源。官方源码地址:GitHub -