服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C#使用SqlServer作为日志数据库的设计与实现

C#使用SqlServer作为日志数据库的设计与实现

2022-10-26 13:22亮大大大 C#

这篇文章主要给大家介绍了关于C#使用SqlServer作为日志数据库的设计与实现的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

做一个简单的日志数据库

功能不需要特别繁琐

主要就是记录普通日志和错误日志(INFO,ERROR)

用数据库作为日志有好处也有坏处

相比于文本来说 更加容易操作

后期查看日志可以根据时间筛选

当然要求也多了点 没那么灵活了

首先你的PC上还要安装一个SqlServer

本来是想用log4net配置去实现的

发现配置很繁琐 决定自己设计一个 肯定有不少不足之处

分为以下几个步骤

1.建立日志数据表

都用一个表来存放,那么字段就要多设置一个 用来区分不同的日志类型

具体怎么设置 也很简单 字段很简单

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace RH.Iot.DomainModel.RhLogDto
{
 /// <summary>
 /// SqlServer数据库记录日志传输模型
 /// </summary>
 [SugarTable("LogRecord")]
 public class RhLogRecordDtoSqlServer
 {
  /// <summary>
  /// 索引
  /// </summary>
  [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]//主键并且自增 (string不能设置自增)
  public int Id { get; set; }
  /// <summary>
  /// 日期
  /// </summary>
  public string DateTime { get; set; }
  /// <summary>
  /// 日志等级名称
  /// </summary>
  public string LevelName { get; set; }
  /// <summary>
  /// 信息
  /// </summary>
  public string Message { get; set; }
  /// <summary>
  ///异常
  /// </summary>
  public string Exception { get; set; }
  /// <summary>
  /// 无参构造器
  /// </summary>
  public RhLogRecordDtoSqlServer()
  {
 
  }
  /// <summary>
  /// 有参构造器
  /// </summary>
  public RhLogRecordDtoSqlServer(int Id,string DateTime,string LevelName,string Message,string Exception)
  {
   this.Id = Id;
   this.DateTime = DateTime;
   this.LevelName =LevelName;
   this.Message = Message;
   this.Exception = Exception;
 
  }
 }
}

我这里用到了SqlSugar这个Orm框架

不会的话可以去学一下 用数据库少不了与这个框架打交道

如果你已经初步了解了SqlSugar 请再看一下它的仓储概念

然后引入你的程序 如果你不想也可以 你子要可以保证自己的程序可以访问数据库并且进行基本的插入数据操作就好了

上面是数据库表的映射类
那么表的建立和它的Sql语句

?
1
2
3
4
5
6
7
8
CREATE TABLE [dbo].[LogRecord] (
 [Id]  INT   IDENTITY (1, 1) NOT NULL,
 [DateTime] NVARCHAR (20) NULL,
 [LevelName] NCHAR (10)  NULL,
 [Message] NVARCHAR (MAX) NULL,
 [Exception] NVARCHAR (MAX) NULL,
 PRIMARY KEY CLUSTERED ([Id] ASC)
);

2.建立相关的数据访问层

我这里使用了仓储 ,你也可以使用自己的方式

3.帮助操作类

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
using Microsoft.Extensions.Logging;
using RH.Iot.DomainModel.RhLogDto;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace RH.Iot.DbAccess.RhSqlServerDbAccess.RhLogDbAccess
{
 
 /// <summary>
 /// LogDbHelper 数据库日志操作
 /// 使用SqlServer做数据存储
 /// 目前提供异常和普通日志记录
 /// 方法待扩充
 /// 如果遇到数据库连接不上的问题 日志模式回归到txt模式(规划中...)
 /// </summary>
 public class RhLogDbHelper
 {
  /// <summary>
  /// 模型
  /// </summary>
  public RhLogRecordDtoSqlServer rhLogRecordDtoSqlServer;
  /// <summary>
  /// 私有化数据访问器
  /// </summary>
  private RhLogRecordDtoDbAccessSqlServer DbAccess;
  /// <summary>
  /// 构造器注入
  /// </summary>
  /// <param name="dbAccess">提供相应的数据访问类</param>
  public RhLogDbHelper(RhLogRecordDtoDbAccessSqlServer dbAccess)
  {
   DbAccess = dbAccess;
   rhLogRecordDtoSqlServer = new RhLogRecordDtoSqlServer();
  }
 
  public void LogInfo(string msg) {
 
   rhLogRecordDtoSqlServer.DateTime = DateTime.Now.ToString();
   rhLogRecordDtoSqlServer.LevelName = "INFO";
   rhLogRecordDtoSqlServer.Message = msg;
   DbAccess.InsertAsync(rhLogRecordDtoSqlServer);
 
  }
 
  public void LogError(string msg,Exception ex)
  {
   rhLogRecordDtoSqlServer.DateTime = DateTime.Now.ToString();
   rhLogRecordDtoSqlServer.LevelName = "ERROR";
   rhLogRecordDtoSqlServer.Message = msg;
   rhLogRecordDtoSqlServer.Exception = ex.ToString();
   DbAccess.InsertAsync(rhLogRecordDtoSqlServer);
   
 
  }
 }
}

这些内容不可直接复制

因为项目引用不一样

但可以参考

4.使用

?
1
2
3
4
5
6
7
8
9
10
11
12
RhLogDbHelper rldh = new RhLogDbHelper(new RhLogRecordDtoDbAccessSqlServer());
  rldh.LogInfo("hhahaha");
  try
  {
   int a = 1;
   int b = a / 0;
  }
  catch (Exception ex)
  {
 
   rldh.LogError("除法异常",ex);
  }

5.结果

C#使用SqlServer作为日志数据库的设计与实现

这只是很简单的一个日志数据库

后面还要加上更多功能

到此这篇关于C#使用SqlServer作为日志数据库的设计与实现的文章就介绍到这了,更多相关C#用SqlServer作日志数据库内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_38083655/article/details/112171120

延伸 · 阅读

精彩推荐
  • C#C#隐藏主窗口的方法小结

    C#隐藏主窗口的方法小结

    这篇文章主要介绍了C#隐藏主窗口的方法,列举了C#隐藏窗口的三种常用方法,涉及C#窗体操作的常用技巧,需要的朋友可以参考下...

    Microblue5672021-11-15
  • C#C# 开发step步骤条控件详解

    C# 开发step步骤条控件详解

    本篇文章主要介绍了用C#来实现一个step控件的方法步骤,具有很好的参考价值。下面跟着小编一起来看下吧...

    JackWang-CUMT7792021-12-28
  • C#C#实现影院售票系统

    C#实现影院售票系统

    这篇文章主要为大家详细介绍了C#实现影院售票系统,解析了售票系统的难点,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    可爱的黄油手3372022-03-09
  • C#C# 实现SDL2进行视频播放窗口截图和字幕添加

    C# 实现SDL2进行视频播放窗口截图和字幕添加

    这篇文章主要介绍了C# 实现SDL2进行视频播放窗口截图和字幕添加,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    boonya11012022-10-20
  • C#C#连接Oracle数据库使用Oracle.ManagedDataAccess.dll

    C#连接Oracle数据库使用Oracle.ManagedDataAccess.dll

    这篇文章主要介绍了C#使用Oracle.ManagedDataAccess.dll的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    上青天揽月8822022-01-25
  • C#Unity实现通用的信息提示框

    Unity实现通用的信息提示框

    这篇文章主要为大家详细介绍了Unity实现通用的信息提示框,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    xiaochenXIHUA5312022-09-16
  • C#C#操作数据库中存取图片文件的方法

    C#操作数据库中存取图片文件的方法

    这篇文章主要介绍了C#操作数据库中存取图片文件的方法,以实例形式分析了C#将图片存入数据库及从数据库读取图片文件的相关技巧,具有一定参考借鉴价值...

    weiren200611012021-10-28
  • C#C#信号量用法简单示例

    C#信号量用法简单示例

    这篇文章主要介绍了C#信号量用法,结合简单C#控制台应用程序形式分析了信号量的功能、定义、调用、释放等操作技巧,需要的朋友可以参考下...

    kagula10822021-11-30