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

前言

做一个简单的日志数据库

功能不需要特别繁琐

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

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

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

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

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

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

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

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

分为以下几个步骤

1.建立日志数据表

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

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

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语句

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.帮助操作类

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.使用

 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作日志数据库内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

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

    前言 做一个简单的日志数据库 功能不需要特别繁琐 主要就是记录普通日志和错误日志(INFO,ERROR) 用数据库作为日志有好处也有坏处 相比于文本来说 更加容易操作 后期查看日志可以根据时间筛选 当然要求也多了点 没那么灵活了 首先你的PC上还要安装一个SqlServer 本来是想用log4net配置去实现的 发现配置很繁琐 决定自己设计一个 肯定有不少不足之处 分为以下几个步骤 1.建立日志数据表 都用一个表来存放,那么字段就要多设置一个 用来区分不同的日志类型 具体怎么设置 也很简单 字段

  • 详解SQLServer 2008 R2数据库SSAS建模及扩展能力

    SQLServer 2008 R2数据库中提供的SSAS建模工具包括包括SQL Server Management Studio 和Business Intelligence Development Studio,那么建模的过程是怎样的呢?本文我们就来介绍这些,接下来就让我们来一起了解一下SQLServer 2008 R2数据库的建模工具和关键过程以及数据挖掘.权限和访问接口等的知识吧. 建模工具和关键过程 SSAS的建模的目的是设计多维数据库对象,建模的工具包括SQL Server Manag

  • SQLServer清理日志文件方法案例详解

    很多时候SQLSERVER的日志文件是不看的,但时间久了,够把磁盘撑爆,这时候就需要清理日志文件.使用以下方法,在实际环境中经过测试,400G的日志文件1秒就被清理. 操作步骤 1. 将恢复模式改成"简单" 右键数据库 - 属性,切换到选项,将恢复模式修改为简单. 2. 收缩日志 右键数据库 - 任务 - 收缩 - 文件 确定后会发现,日志文件被迅速清理. 3. 命令操作 USE [master] GO ALTER DATABASE 要清理的数据库名称 SET RECOVERY SIM

  • SQL Server 数据库的设计详解

    一.数据库设计的必要性 在实际的软件项目中,如果系统中需要存储的数据量比较大,需要设计的表比较多,表与表之间的关系比较复杂,那我们就需要进行规范的数据库设置.如果不经过数据库的设计,我们构建的数据库不合理.不恰当,那么数据库的维护.运行效率会有很大的问题.这将直接影响到项目的运行性和可靠性. 二.什么是数据库设计 数据库设计实际上就是规划和结构化数据库中的数据对象以及这些数据对象之间的关系过程. 三.数据库设计的重要性 不经过设计的数据库或是设计糟糕的数据库很可能导致 1. 数据库运行效率地下

  • SQLServer 清理日志的实现

    本文以sql2012为例 第一步,(查询日志中文件名和大小): USE 数据库名 GO SELECT file_id, name,size,* FROM sys.database_files; 查询结果如上图所示,可以看到其中name字段为日志文件名,size是日志大小,接下来就可以执行清理日志操作.值得注意的是,清理日志必须先将数据库转成简单模式,清理后再将数据库置为完全模式,具体的语句如下: 第二步,清理: USE [master] GO ALTER DATABASE 数据库名 SET RE

  • 数据库的设计方法、规范与技巧

    一.数据库设计过程 数据库技术是信息资源管理最有效的手段.数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,有效存储数据,满足用户信息要求和处理要求. 数据库设计中需求分析阶段综合各个用户的应用需求(现实世界的需求),在概念设计阶段形成独立于机器特点.独立于各个DBMS产品的概念模式(信息世界模型),用E-R图来描述.在逻辑设计阶段将E-R图转换成具体的数据库产品支持的数据模型如关系模型,形成数据库逻辑模式.然后根据用户处理的要求,安全性的考虑,在基本表的基础上

  • 分享网站群发站内信数据库表设计

    "站内信"不同于电子邮件,电子邮件通过专门的邮件服务器发送.保存.而"站内信"是系统内的消息,说白了,"站内信"的实现,就是通过数据库插入记录来实现的. "站内信"有两个基本功能.一:点到点的消息传送.用户给用户发送站内信:管理员给用户发送站内信.二:点到面的消息传送.管理员给用户(指定满足某一条件的用户群)群发消息.点到点的消息传送很容易实现,本文不再详述.下面将根据不同的情况,来说说"站内信"的群发是如

  • 使用SQL语句查询MySQL,SQLServer,Oracle所有数据库名和表名,字段名

    MySQL中查询所有数据库名和表名 查询所有数据库 show databases; 查询指定数据库中所有表名 select table_name from information_schema.tables where table_schema='database_name' and table_type='base table'; 查询指定表中的所有字段名 select column_name from information_schema.columns where table_schema

  • 关系型数据库的设计规则详解

    目录 表关系设计 1.一对一关联(one-to-one) 2.一对多关系(one-to-many) 3.多对多(many-to-many) 4.自我引用(Self reference) E-R(Entity-relationship,实体-联系)模型中有三个主要概念是:实体集.属性.联系集. 一个实体集(class)对应于数据库中的一个表,一个实体(instance)则对应数据库表中的一行,也称一条记录.一个属性对应于数据库表中的一列(column),也称一个字段. ORM思想(Object R

  • MySQL 数据库范式化设计理论总结

    目录 一.设计范式 1.第一范式(1NF) 2.第二范式(2NF) 3.第三范式 (3NF) 二.范式化设计 三.反规范化设计 四.设计总结 一.设计范式 问题: 什么是范式化设计,为什么需要反规范化设计 ? 范式来自来自英文Normal From .开发过程中要设计一个好的数据库逻辑关系,必须满足一定的约束条件,此约束条件形成了开发范式,分成几个等级,一级比一级严格. 满足这些范式理论上可以让我们的数据库逻辑结构更加简洁.清晰. 以下是常见的四种范式: 第一范式(1NF) 第二范式(2NF)

随机推荐