日志起名(基于Log4Net实现日志信息存储至数据库)
-Begin-
1、引言
在上位机开发中,日志记录是必不可少的,我们可以通过日志记录做日志分析及错误追踪。初学者会采用txt文本写入来实现日志保存,但是文本写入不是线程安全,当存在多个线程同时写入日志时,就会出现一些问题。Log4net库是.Net下一个非常优秀的开源日志记录组件,是一个帮助开发者将日志信息输出到各种目标(控制台、文件、数据库等)的工具。本节主要采用开源组件Log4Net来实现错误ERROR信息文本存储,并结合SQLite数据库,将日志INFO信息存储到数据库中,便于后续的查询。
2、开发准备
- 首先新建一个Windows窗体应用,取名为thinger.cn.Log4NetSQLitePro,UI界面设计如下所示:
![基于Log4Net实现日志信息存储至数据库](http://www.wanshixiao.cn/uploads/image/20230520/26/49215b85ec88f6fe0aefc81f1e47c333.jpg)
- 通过Nuget添加Log4Net开源组件,如下所示:
![基于Log4Net实现日志信息存储至数据库](http://www.wanshixiao.cn/uploads/image/20230520/61/d5e3caba66257273b1010b481448185b.jpg)
- 通过Nuget添加SQLite组件,如下所示:
![基于Log4Net实现日志信息存储至数据库](http://www.wanshixiao.cn/uploads/image/20230520/99/c91683389acfc7c5c2fe90ba8bfb58ba.jpg)
3、文本存储
一般情况下,我们可以将一些错误及异常信息存储在文本中,便于随时打开文件进行查询,文本存储将自动以天为单位,每天对应一个文件,步骤如下:
- 添加一个应用程序配置文件项目右击添加新建项,项目类型选择应用程序配置文件,名称为log4net.config,如下所示:
![基于Log4Net实现日志信息存储至数据库](http://www.wanshixiao.cn/uploads/image/20230520/97/b314547749aadb0b2a1fa1b99e675138.jpg)
- 配置文件编写日志配置文件增加相关节点,如下所示:
![基于Log4Net实现日志信息存储至数据库](http://www.wanshixiao.cn/uploads/image/20230520/48/c31d8e21c318f674172eeaf78e021b58.jpg)
配置文件规定了日志信息的相关属性、存储方式、日志内容格式等,配置信息如下所示:
![基于Log4Net实现日志信息存储至数据库](http://www.wanshixiao.cn/uploads/image/20230520/15/0831ad622a5a77859f9a91e52d2ff549.jpg)
其中,较为重要的是日志信息的格式,对应上面文件中的ConversionPattern,值为"[%d]%n%m%n%n",每个占位符有对应的含义,如下所示:
字符格式 | 说明 |
%m(message) | 输出的日志消息 |
%n(newline) | 换行 |
%d(datetime) | 输出当前语句运行的时刻 |
%r(runtime) | 输出程序执行到当前消耗的毫秒数 |
%t(threadid) | 当前语句所在的线程ID |
%p(priority) | 日志的当前日志级别 |
%c(class) | 当前日志对象的名称 |
%L | 输出语句所在的行号 |
%F | 输出语句所在的文件名 |
%-10 | 最小长度为10,不够空格填充 |
- 配置文件属性中的复制到输出目录,设置为始终复制或如果较新则复制,如下图所示:
![基于Log4Net实现日志信息存储至数据库](http://www.wanshixiao.cn/uploads/image/20230520/71/46b78ba0a629b4bde88f1f9d4b616599.jpg)
- 项目的AssemblyInfo.cs类中添加一行代码,如下所示:
![基于Log4Net实现日志信息存储至数据库](http://www.wanshixiao.cn/uploads/image/20230520/99/9f6d3fe8b359183700673b5c7e89518c.jpg)
- 添加一个LogHelper类,编写2个Error的方法,如下所示:
![基于Log4Net实现日志信息存储至数据库](http://www.wanshixiao.cn/uploads/image/20230520/87/def3456dd7de0042be4f944e94b7b9ab.jpg)
- 在ini文本存储按钮事件下,调用错误日志写入,如下所示:
![基于Log4Net实现日志信息存储至数据库](http://www.wanshixiao.cn/uploads/image/20230520/67/c16e39c34621ec6d87f6b083a6d5e4f1.jpg)
- 执行完成后,在项目目录,Log\Error目录下,产生一条当天日志命名的文件,打开如下所示:
![基于Log4Net实现日志信息存储至数据库](http://www.wanshixiao.cn/uploads/image/20230520/74/657c3dcbb4188b12cc68f58771edec06.jpg)
4、SQLite存储
日志信息存储到数据库的好处在于便于用户通过界面进行查询,这里采用开源免费数据库SQLite,其他关系型数据库,如SQLServer、mysql,原理都是一样的,具体步骤如下所示:
- 创建数据库及数据表通过SQLiteStudio软件创建一个数据库,取名为Log4NetSQLite,执行以下脚本创建一个Log数据表:
![基于Log4Net实现日志信息存储至数据库](http://www.wanshixiao.cn/uploads/image/20230520/71/05e79baa677d4913e06bf24b3da10fd4.jpg)
- 将数据库文件复制到项目根目录下的DataBase文件夹中
- 修改log4net.config文件,增加数据库存储相关配置,如下所示:
bufferSize:日志缓存写入条数 设置为0时只要有一条就立刻写到数据库
connectionString:SQLite指向的是数据库文件的绝对路径
- LogHelper类中增加一个Info方法,如下所示:
![基于Log4Net实现日志信息存储至数据库](http://www.wanshixiao.cn/uploads/image/20230520/64/ee5358008daed313f46d5b042527de29.jpg)
- 在SQLite存储按钮事件下,调用Info日志写入,如下所示:
![基于Log4Net实现日志信息存储至数据库](http://www.wanshixiao.cn/uploads/image/20230520/60/29bc9d101c9f74fff5c1bae6ac7376d2.jpg)
- 执行完成后,打开数据库,查看是否有相关记录:
![基于Log4Net实现日志信息存储至数据库](http://www.wanshixiao.cn/uploads/image/20230520/86/c84c851f8c322499388daa6d3ec32f3e.jpg)
5、实际应用
通过上面一系列的描述,相信大家对Log4Net的应用有了一些了解,Log4Net构建的日志系统是很多项目必备的一个功能,对项目开发、调试及后续维护都有着至关重要的作用。实际使用时,我们还可以将Log4Ne作为一个简单的数据存储工具,甚至可以使用Log4Net做多表多库存储,这些内容后续再给大家进行介绍。
需要相关的学习资料,可以在评论区留言。
-END-
- · 北京起名大师李宗翰(《锦心似玉》几位长辈年轻时都是美女,徐令宜两位丈母娘都比他小)
- · 西安孩子起名(西安风水大师严峻师傅分享:怎么运用汉字修辞手法给孩子起名)
- · 网上起名可信吗(新手父母起名难,大师出手数百元起步是否靠谱?)
- · 起名 骗局(奶奶为给宝宝起个好名字 轻信网上“起名大师”被骗500多元)
- · 起名改名大师(同样是起名大师王道子和颜廷利谁更厉害?)
- · 洛阳起名大师(河洛工匠崔红涛:传承“新安窑”千年窑火,展现黄河文化新安魅力)
- · 梦见自己拉屎-起名网(梦见拉屎 - 周公解梦大师 梦境解释:梦到拉屎)
- · 保定起名大师(保定的由来,跟战事有关)
- · 最好的起名大师(起名大师排名谁第一:起名大师王道子如何影响我们的命名文化)
- · 宝宝起名取名大师(中国最好的起名大师——林大师)