0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Log4Net日志存储

微云疏影 来源:dotNet工控上位机 作者:dotNet工控上位机 2022-08-11 15:59 次阅读

1、引言

上位机开发中,日志记录是必不可少的,我们可以通过日志记录做日志分析及错误追踪。初学者会采用txt文本写入来实现日志保存,但是文本写入不是线程安全,当存在多个线程同时写入日志时,就会出现一些问题。Log4net库是.Net下一个非常优秀的开源日志记录组件,是一个帮助开发者将日志信息输出到各种目标(控制台、文件、数据库等)的工具。本节主要采用开源组件Log4Net来实现错误ERROR信息文本存储,并结合SQLite数据库,将日志INFO信息存储到数据库中,便于后续的查询。

2、开发准备

首先新建一个Windows窗体应用,取名为thinger.cn.Log4NetSQLitePro,UI界面设计如下所示:

pYYBAGL0ts-AFB-hAAAwo84_ixA535.png

通过Nuget添加Log4Net开源组件,如下所示:

pYYBAGL0ts-ATKxZAAJDyKwTHQA764.png

通过Nuget添加SQLite组件,如下所示:

poYBAGL0ttCAdrIiAAJloM0LCkg434.png

3、文本存储

一般情况下,我们可以将一些错误及异常信息存储在文本中,便于随时打开文件进行查询,文本存储将自动以天为单位,每天对应一个文件,步骤如下:

添加一个应用程序配置文件

项目右击添加新建项,项目类型选择应用程序配置文件,名称为log4net.config,如下所示:

poYBAGL0ttGAPlEGAAKoj07QGO4741.png

配置文件编写

日志配置文件增加相关节点,如下所示:

poYBAGL0ttGARPH2AADaDWPYDko114.png

配置文件规定了日志信息的相关属性、存储方式、日志内容格式等,配置信息如下所示:

poYBAGL0ttGAU0uYAABlPv8AUkQ310.png

其中,较为重要的是日志信息的格式,对应上面文件中的ConversionPattern,值为"[%d]%n%m%n%n",每个占位符有对应的含义,如下所示:

pYYBAGL0ttKAG7TqAAHnr_L4Wu0583.png

配置文件属性中的复制到输出目录,设置为始终复制或如果较新则复制,如下图所示:

poYBAGL0ttKAR5U_AAB8c1DUKDw001.png

项目的AssemblyInfo.cs类中添加一行代码,如下所示:

poYBAGL0ttKAOYtfAAAPwVZXB3s056.png

添加一个LogHelper类,编写2个Error的方法,如下所示:

pYYBAGL0ttKAEnKDAAA-Sbx7MM4563.png

在ini文本存储按钮事件下,调用错误日志写入,如下所示:

poYBAGL0ttKATk4hAAAekEpwa-k369.png

执行完成后,在项目目录,LogError目录下,产生一条当天日志命名的文件,打开如下所示:

poYBAGL0ttOAdWNXAABF8VYgsEY050.png

4、SQLite存储

日志信息存储到数据库的好处在于便于用户通过界面进行查询,这里采用开源免费数据库SQLite,其他关系型数据库,如SQLServer、mysql,原理都是一样的,具体步骤如下所示:

创建数据库及数据表

通过SQLiteStudio软件创建一个数据库,取名为Log4NetSQLite,执行以下脚本创建一个Log数据表:

pYYBAGL0ttOAHKkYAAAVbMvcIPw129.png

将数据库文件复制到项目根目录下的DataBase文件夹中

修改log4net.config文件,增加数据库存储相关配置,如下所示:

poYBAGL0ttOASNViAAEJ0nu_xZg497.png

bufferSize:日志缓存写入条数 设置为0时只要有一条就立刻写到数据库

connectionString:SQLite指向的是数据库文件的绝对路径

LogHelper类中增加一个Info方法,如下所示:

pYYBAGL0ttOABNn-AAAUFmSqAy0519.png

在SQLite存储按钮事件下,调用Info日志写入,如下所示:

poYBAGL0ttOARyntAABh0sY08bc169.png

执行完成后,打开数据库,查看是否有相关记录:

pYYBAGL0ttSAJ-RZAADonkZUWqk506.png

5、实际应用

通过上面一系列的描述,相信大家对Log4Net的应用有了一些了解,Log4Net构建的日志系统是很多项目必备的一个功能,对项目开发、调试及后续维护都有着至关重要的作用。实际使用时,我们还可以将Log4Ne作为一个简单的数据存储工具,甚至可以使用Log4Net做多表多库存储等等,大家在工作中,会经常用到。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据库
    +关注

    关注

    7

    文章

    3584

    浏览量

    63346
  • 日志系统
    +关注

    关注

    0

    文章

    7

    浏览量

    6946
  • 上位机
    +关注

    关注

    26

    文章

    856

    浏览量

    54014
收藏 人收藏

    评论

    相关推荐

    Nginx日志分割方案

    nginx 默认没有提供对日志文件的分割功能,所以随着时间的增长,access.log 和 error.log 文件会越来越大,尤其是 access.log,其
    发表于 06-19 15:05 268次阅读
    Nginx<b class='flag-5'>日志</b>分割方案

    嵌入式linux下的c语言简易日志log模块带颜色显示相关资料推荐

    ;this is error\n");Log(WARN,"this is warn\n");一个log.c文件和一个log.h文件使用时包含log.h文件即可。暂时支持四个级别和红绿黄
    发表于 12-20 08:16

    logcat如何查看Andriod log系统日志

    logcat会输出系统哪些信息呢?如何学习logcat命令?logcat如何查看Andriod log系统日志?如何查看Andriod log系统日志
    发表于 03-03 06:15

    MySQL中的redo log是什么

    前言 说到MySQL,有两块日志一定绕不开,一个是InnoDB存储引擎的redo log(重做日志),另一个是MySQL Servce层的 binlog(归档
    的头像 发表于 09-14 09:40 1783次阅读

    基于Log4Net实现日志信息双向存储

    在上位机开发中,日志记录是必不可少的,我们可以通过日志记录做日志分析及错误追踪。初学者会采用txt文本写入来实现日志保存,但是文本写入不是线程安全,当存在多个线程同时写入
    的头像 发表于 03-29 14:12 1036次阅读
    基于<b class='flag-5'>Log4Net</b>实现<b class='flag-5'>日志</b>信息双向<b class='flag-5'>存储</b>

    详解MySQL三大日志的作用

    MySQL日志 主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。其中,比较重
    的头像 发表于 07-22 14:44 974次阅读

    最全的Nginx日志分割教程

    nginx 默认没有提供对日志文件的分割功能,所以随着时间的增长,access.log 和 error.log 文件会越来越大,尤其是 access.log,其
    的头像 发表于 02-16 14:51 655次阅读

    log4j日志框架分析

    og4j是Apache下的一款开源的日志框架,能够满足我们在项目中对于日志记录的需求。log4j提供了简单的API调用,强大的日志格式定义以及灵活的扩展性。使用者可以自己定义Appen
    的头像 发表于 02-28 14:32 648次阅读
    <b class='flag-5'>log</b>4j<b class='flag-5'>日志</b>框架分析

    针对大量log日志快速定位错误地方

    用 grep 拿到的日志很少,我们需要查看附近的日志。我是这样做的,首先: cat -n test.log | grep “关键词” 得到关键日志的行号
    的头像 发表于 04-21 09:22 465次阅读

    C#上位机开发(十三)之使用Log4net添加日志记录功能

    一、Log4net 官方网站: 。 下载二进制dll库:包中提供了针对各个版本的dll库: 二、使用日志库 1. 添加库 复制对应的库文件到项目中: 2. 配置log4net 2.1. 创建配置文件添加后修改该文件设置:
    发表于 05-29 16:25 1次下载
    C#上位机开发(十三)之使用<b class='flag-5'>Log4net</b>添加<b class='flag-5'>日志</b>记录功能

    服务器log日志大,掌握这些可正确快速定位错误!

    针对大量log日志快速定位错误地方
    的头像 发表于 06-05 18:14 425次阅读

    MySQL三种日志讲解

    MySQL 日志包含了错误日志、查询日志、慢查询日志、事务日志、二进制日志等,如果
    的头像 发表于 07-25 11:15 455次阅读
    MySQL三种<b class='flag-5'>日志</b>讲解

    基于Rust的Log日志库介绍

    Rust是一门系统级编程语言,因其安全性、高性能和并发性而备受欢迎。在Rust应用程序中,日志记录是一项非常重要的任务,因为它可以帮助开发人员了解应用程序的运行情况并解决问题。Rust的Log库提供
    的头像 发表于 09-19 14:49 2056次阅读

    保护Log4j日志中的敏感数据,两步搞定!

    log4j在准备添加日志消息时调用此方法。在MaskingAppender类中,我们覆盖这个方法来拦截日志消息,使用maskSensitiveData()方法对敏感数据应用masking,然后将修改后的消息传递给超类的appen
    的头像 发表于 10-18 16:03 302次阅读

    Log4cpp优势及优点

    1、log4cpp概述 Log4cpp是一个开源的C++类库,它提供了C++程序中使用日志和跟踪调试的功能,它的优点如下: 提供应用程序运行上下文,方便跟踪调试; 可扩展的、多种方式记录日志
    的头像 发表于 11-09 14:27 266次阅读
    <b class='flag-5'>Log</b>4cpp优势及优点