热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

这篇文章主要给大家介绍了关于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
{
 /// 
 /// SqlServer数据库记录日志传输模型
 /// 
 [SugarTable("LogRecord")]
 public class RhLogRecordDtoSqlServer
 {
  /// 
  /// 索引
  /// 
  [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]//主键并且自增 (string不能设置自增)
  public int Id { get; set; }
  /// 
  /// 日期
  /// 
  public string DateTime { get; set; }
  /// 
  /// 日志等级名称
  /// 
  public string LevelName { get; set; }
  /// 
  /// 信息
  /// 
  public string Message { get; set; }
  /// 
  ///异常
  /// 
  public string Exception { get; set; }
  /// 
  /// 无参构造器
  /// 
  public RhLogRecordDtoSqlServer()
  {

  }
  /// 
  /// 有参构造器
  /// 
  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
{
 
 /// 
 /// LogDbHelper 数据库日志操作
 /// 使用SqlServer做数据存储
 /// 目前提供异常和普通日志记录
 /// 方法待扩充
 /// 如果遇到数据库连接不上的问题 日志模式回归到txt模式(规划中...)
 /// 
 public class RhLogDbHelper
 {
  /// 
  /// 模型
  /// 
  public RhLogRecordDtoSqlServer rhLogRecordDtoSqlServer;
  /// 
  /// 私有化数据访问器
  /// 
  private RhLogRecordDtoDbAccessSqlServer DbAccess;
  /// 
  /// 构造器注入
  /// 
  /// 提供相应的数据访问类
  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作日志数据库内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!


推荐阅读
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 延迟注入工具(python)的SQL脚本
    本文介绍了一个延迟注入工具(python)的SQL脚本,包括使用urllib2、time、socket、threading、requests等模块实现延迟注入的方法。该工具可以通过构造特定的URL来进行注入测试,并通过延迟时间来判断注入是否成功。 ... [详细]
  • 本文介绍了一个免费的asp.net控件,该控件具备数据显示、录入、更新、删除等功能。它比datagrid更易用、更实用,同时具备多种功能,例如属性设置、数据排序、字段类型格式化显示、密码字段支持、图像字段上传和生成缩略图等。此外,它还提供了数据验证、日期选择器、数字选择器等功能,以及防止注入攻击、非本页提交和自动分页技术等安全性和性能优化功能。最后,该控件还支持字段值合计和数据导出功能。总之,该控件功能强大且免费,适用于asp.net开发。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 本文详细介绍了Mybatis中#与$的区别及其作用。#{}可以防止sql注入,拼装sql时会自动添加单引号,适用于单个简单类型的形参。${}则将拿到的值直接拼装进sql,可能会产生sql注入问题,需要手动添加单引号,适用于动态传入表名或字段名。#{}可以实现preparedStatement向占位符中设置值,自动进行类型转换,有效防止sql注入,提高系统安全性。 ... [详细]
  • 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之六 || API项目整体搭建 6.1 仓储模式
    代码已上传Github+Gitee,文末有地址  书接上文:前几回文章中,我们花了三天的时间简单了解了下接口文档Swagger框架,已经完全解放了我们的以前的Word说明文档,并且可以在线进行调 ... [详细]
  • C#设计模式之八装饰模式(Decorator Pattern)【结构型】
    一、引言今天我们要讲【结构型】设计模式的第三个模式,该模式是【装饰模式】,英文名称:DecoratorPattern。我第一次看到这个名称想到的是另外一个词语“装修”,我就说说我对“装修”的理 ... [详细]
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
  • PreparedStatement防止SQL注入
    添加数据:packagecom.hyc.study03;importcom.hyc.study02.utils.JDBCUtils;importjava.sql ... [详细]
  • Python如何调用类里面的方法
    本文介绍了在Python中调用同一个类中的方法需要加上self参数,并且规范写法要求每个函数的第一个参数都为self。同时还介绍了如何调用另一个类中的方法。详细内容请阅读剩余部分。 ... [详细]
  • 测绘程序设计Excel度分秒转换模板附代码超实用版
    本文介绍了测绘程序设计Excel度分秒转换模板附代码超实用版的相关知识,包括准备工作、编写表达式和注意事项。在实际工作中,将GPS实测的经纬度度转换为度分秒是常见需求,本文提供了在Excel中快速进行转换的方法,以提高工作效率。 ... [详细]
  • 本文介绍了如何将CIM_DateTime解析为.Net DateTime,并分享了解析过程中可能遇到的问题和解决方法。通过使用DateTime.ParseExact方法和适当的格式字符串,可以成功解析CIM_DateTime字符串。同时还提供了关于WMI和字符串格式的相关信息。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
author-avatar
卧龙先生八斗才
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有