c#物联网_基于C#实现日志记录与SQL SERVER的双向存储工控数字化之旅
↑ 点击上方
“智能制造之家”
关注我们
写在前面
我们在做一些PLC设备联网改造、SCADA项目、MES项目等的时候,我们经常需要做日志记录,这样便于后续做日志分析及错误追踪。比如前面我们介绍到的一些项目:
从零开始基于西门子PLC用C#通过OPC编写一套简易车间能源信息系统(附代码)
自动化设备数据采集与PLC联网方案实例-迈向工厂数字化的第一步
初学者会采用txt文本写入来实现日志保存,但是文本写入不是线程安全,当存在多个线程同时写入日志时,就会出现一些问题。
本节主要采用开源组件Log4Net来实现错误ERROR信息文本存储,并结合SQLite数据库,将日志INFO信息存储到数据库中,便于后续的查询。
1、开发准备
- 首先新建一个Windows窗体应用,取名为thinger.cn.Log4NetSQLitePro,UI界面设计如下所示:
- 通过Nuget添加Log4Net开源组件,如下所示:
- 通过Nuget添加SQLite组件,如下所示:
2、文本存储
一般情况下,我们可以将一些错误及异常信息存储在文本中,便于随时打开文件进行查询,文本存储将自动以天为单位,每天对应一个文件,步骤如下:
添加一个应用程序配置文件
项目右击添加新建项,项目类型选择应用程序配置文件,名称为log4net.config,如下所示:
配置文件编写
日志配置文件增加相关节点,如下所示:
配置文件规定了日志信息的相关属性、存储方式、日志内容格式等,配置信息如下所示:
其中,较为重要的是日志信息的格式,对应上面文件中的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,不够空格填充 |
- 配置文件属性中的复制到输出目录,设置为始终复制或如果较新则复制,如下图所示:
项目的AssemblyInfo.cs类中添加一行代码,如下所示:
添加一个LogHelper类,编写2个Error的方法,如下所示:
在ini文本存储按钮事件下,调用错误日志写入,如下所示:
执行完成后,在项目目录,Log\Error目录下,产生一条当天日志命名的文件,打开如下所示:
3、SQLite存储
日志信息存储到数据库的好处在于便于用户通过界面进行查询,这里采用开源免费数据库SQLite,其他关系型数据库,如SQLServer、mysql,原理都是一样的,具体步骤如下所示:
创建数据库及数据表
通过SQLiteStudio软件创建一个数据库,取名为Log4NetSQLite,执行以下脚本创建一个Log数据表:
将数据库文件复制到项目根目录下的DataBase文件夹中
修改log4net.config文件,增加数据库存储相关配置,如下所示:
bufferSize:日志缓存写入条数 设置为0时只要有一条就立刻写到数据库
connectionString:SQLite指向的是数据库文件的绝对路径
LogHelper类中增加一个Info方法,如下所示:
在SQLite存储按钮事件下,调用Info日志写入,如下所示:
执行完成后,打开数据库,查看是否有相关记录:
4、实际应用
通过上面一系列的描述,相信大家对Log4Net的应用有了一些了解,Log4Net构建的日志系统是很多项目必备的一个功能,对项目开发、调试及后续维护都有着至关重要的作用。实际使用时,我们还可以将Log4Ne作为一个简单的数据存储工具,甚至可以使用Log4Net做多表多库存储,这些内容大家可以自己研究。
5、写在最后【需要源码必看】
最近发现越来越多的小伙伴投入到C#上位机学习中,初学者学习最大的困扰就是无人交流,因此我们组建了一个工控上位机学习交流微信群,欢迎各位小伙伴加入,本文源码也可以通过交流群获取。
PS:本群仅针对初学者,大佬勿进。
硬核专辑
工业热点 | 数据采集 | 应用与库(西门子、罗克韦尔、倍福等)
WinCC技术 | 工业网络 | MES技术相关| 工业巨头战略布局 | 工业通讯案例
仿真与虚拟调试 | 职业感悟、认知提升 | 自动化控制标准合集
软件定义PLC与制造的时代,工程师的职业未来在哪里?
2020-08-12
解读西门子的工业软件帝国,巨头的数字化工业战略
2020-08-18
国内第一份公开的工信部含有物流仿真的行业标准(下载)-物流数字化仓储
2020-08-20
美国如何靠软件卡死中国制造?工业软件从业者超硬核科普
2020-08-21
一文了解西门子、达索、施耐德、罗克韦尔等巨头数字化工厂仿真软件
2020-08-27
西门子Teamcenter与SAP系统集成配置与演示
2020-08-28
自动化设备数据采集项目中S7-1500和PC的时间同步
2020-09-02
最全盘点卡中国脖子的35项技术,折射中国工业水平的真实现状
2020-09-05
西门子、施耐德、罗克韦尔PLC程序设计漏洞探秘
2020-09-07
134页官方PPT解读西门子数字化工业服务
2020-08-24
WinCC (TIA Portal) 访问 SQL SERVER数据库
2020-08-22
深度解析SCADA、物联网IOT和MES之间的联系与区别
2020-08-14
IT大举入侵OT,自动化早已成为一个“软件”行业
2020-08-09
Modbus 的RTU、ASCII、TCP傻傻搞不清楚?一文最全解读
2020-08-10
WinCC与MES的生产工单和批次数据交互
2020-08-07
免责申明:本公众号所载文章为本公众号原创或根据网络搜索编辑整理,文章版权归原作者所有。因转载众多,无法找到真正来源,如标错来源,或对于文中所使用的图片,资料,下载链接中所包含的软件,资料等,如有侵权,请跟我们联系协商或删除,谢谢!
我们是一群智能制造技术的爱好者,我们乐于分享,我们积极向上,我们也许有些宅,但是我们很有爱,我们期待您的加入
--智能制造之家
多重福利哦
1.若您有智能制造相关资料需求,可以到智能制造之家社区进行下载,留言与沟通~
2.进入知识星球智能制造之家,提升自我认知,认识更多朋友,掌握更多资源,更多技巧~
c#物联网_基于C#实现日志记录与SQL SERVER的双向存储工控数字化之旅相关推荐
- mybatis 开启日志记录 打印sql语句
使用mybatis 的时候 ,无法查看sql 语句 !!非常不方便调试程序,所以 配置了日志记录输出sql ,在控制台打印, 1.要配置mybatis 使用log4j 记录日志, 导入 log4j ...
- asp毕业设计——基于vb+VB.NET+SQL Server的数据存储与交换系统设计与实现(毕业论文+程序源码)——数据存储与交换系统
基于vb+VB.NET+SQL Server的数据存储与交换系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于vb+VB.NET+SQL Server的数据存储与交换系统设计与实现,文章 ...
- 快速附加没有日志文件的 SQL Server 数据库文件!
快速附加没有日志文件的 SQL Server 数据库文件: 1 CREATE DATABASE [数据库名称] 2 ON (FILENAME = '数据库文件路径和文件名(如:D:\db\mydb.m ...
- ssms2008 代码自动提示_使用 SSMS 的提示和技巧 - SQL Server Management Studio (SSMS) | Microsoft Docs...
使用 SQL Server Management Studio (SSMS) 的提示和技巧Tips and tricks for using SQL Server Management Studio ...
- 【Microsoft Azure 的1024种玩法】四十八.基于Azure Virtual Machines快速搭建SQL Server应用
[简介] SQL Server系列软件是Microsoft 公司推出的关系型数据库管理系统,本文的主要内容是围绕着Azure Virtual Machines 来快速搭建SQL Server应用,使我 ...
- 考虑题4所示的日志记录_基于Log4Net实现日志信息双向存储
1.引言 在上位机开发中,日志记录是必不可少的,我们可以通过日志记录做日志分析及错误追踪.初学者会采用txt文本写入来实现日志保存,但是文本写入不是线程安全,当存在多个线程同时写入日志时,就会出现一些 ...
- mysql 日志节点恢复_基于binlog二进制日志的MySQL恢复笔记
基于binlog二进制日志的MySQL恢复笔记 刚好复习到这里,顺手做个小实验,记录下. 总的操作流程: step0.关掉数据库的对外访问[防止用户操作继续写入这个库] step1.mysqlbinl ...
- (转)如何在MySql中记录SQL日志(例如Sql Server Profiler)
SQL server有一个sql profiler可以实时跟踪服务器执行的SQL语句,这在很多时候调试错误非常有用.例如:别人写的复杂代码.生产系统.无调试环境.无原代码... ... 查了一下资料, ...
- Mysql数据库中插入记录的命令_向数据库中添加记录的sql命令是什么
向数据库中添加记录的sql命令是INSERT INTO. (推荐学习:mysql教程) INSERT INTO 语句的语法 INSERT INTO 语句可以有两种编写形式,分别是: 第一种形式 无需指 ...
最新文章
- Oracle DML、DDL、DCL的区别
- 读取XML文件的节点内的内容
- swig模板 PHP,如何使用nodejs前端模板引擎swig
- 【渝粤教育】 国家开放大学2020年春季 1001中国法制史 参考试题
- 【转】C#中枚举类型与静态变量
- php数组排序id取得,php专用数组排序类ArraySortUtil用法实例
- 工业上的数控机床所属计算机应用的什么领域,工业上的数控机床所属的计算机应用领域是______。...
- 适合财务人员的财务报表分析软件有哪些?
- 学习Java需要掌握哪些知识,初学者必备
- win10系统与时间服务器同步超时,Win10时间同步出错怎么办 Win10时间同步出错解决方法...
- 为什么打开服务器word文档是只读,以只读方式打开Word文档的方法
- 我们是龙的传人还是狼的传人? 《狼图腾》--- 绝对值得一读的书
- 从Cheney算法-广度优先搜索-倒酒问题(JAVA实现)
- 网页美学设计原则(上)
- python 地形图_Python-Evoked地形图可视化
- 详解Shell脚本:正则表达式
- linux驱动编写之十六(块驱动设备初识)
- c语言里op,57-赋值语句中的op=形式
- 苏泊尔搭载华为鸿蒙系统,苏泊尔小C主厨料理机体验:华为鸿蒙系统加持,融汇多种功能...
- 【第三趴】uni-app页面搭建与路由配置(了解工程目录结构、学会搭建页面、配置路由并成功运行)