C#使用SqlServer作为日志数据库的设计与实现
作者:亮大大大 发布时间:2024-01-17 05:10:12
标签: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.结果
这只是很简单的一个日志数据库
后面还要加上更多功能
来源:https://blog.csdn.net/weixin_38083655/article/details/112171120
0
投稿
猜你喜欢
- 12-24小时制编写一个程序,要求用户输入24小时制的时间,然后显示12小时制的时间。输入格式:输入在一行中给出带有中间的:符号(半角的冒号
- #!/usr/bin/python #-*-coding:utf-8-*-from PyQt4.QtGui import *fr
- JS获取多选框checkbox被选中的个数。var checkbox = document.getElementsByName("
- 我就废话不多说了,大家还是直接看代码吧~#coding:utf-8import numpy as np## 改变数组的形状#将b 变成3*4
- sorted函数sorted(iterable,key,reverse)iterable 待排序的可迭代对象key 对应的是个函数, 该函数
- 先给大家讲解一下什么是kalikali是一种Linux系统,kali是专门用来渗透的,他是由back track系统演化而来的,后面结合了l
- 代码如下:CREATE FUNCTION dbo.f_splitstr( @str varchar(8000) )RETURNS
- 事情是这样的520晚上,正跟队友 啪啪啪 组团开黑突然,微信上前女友的头像跳动了起来快一年了,难道是想要复合?发来的竟是一个 "
- 本文实例讲述了python 读写excel文件操作。分享给大家供大家参考,具体如下:对excel文件的操作,python有第三方的工具包支持
- 最近,在项目开发过程中,碰到了数据库死锁问题,在解决问题的过程中,笔者对MySQL InnoDB引擎锁机制的理解逐步加深。案例如下:在使用S
- PyCharm PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法
- 目录1.爬虫文件2.items.py3.pipelines.py4.进行持久化存储之前我们使用lxml对梨视频网站中的视频进行了下载,感兴趣
- 前言在字典中查找某一个值的时候,若key不存在就会返回一个keyerror错误而不是一个默认值,如果想要返回一个默认值可以使用default
- 对于SQL的新手,NULL值的概念常常会造成混淆,他们常认为NULL是与空字符串''相同的事。情况并非如此。例如,下述语句是
- 最近开始学习Python开发,“工欲善其事必先利其器”,Python程序都是用什么工具开发出来的呢。
- 数组去重复和数组排序'数组名次 Function Sort(ary,stra) KeepChecking =&n
- 在这之前我们先回顾以前用php导出excel,我直接写成方法在这里:public static function phpExcelList(
- spring boot 不连接数据库启动用spring boot 搭建的项目,在配置文件不连接数据库启动项目会报错。原因在于spring b
- 在数据库开发方面,通过单表所表现的实现,有时候需要组合查询来找到我们需要的记录集,这时候我们就会用到连接查询。连接查询主要包括以下几个方面:
- 一、函数基础简单地说,一个函数就是一组Python语句的组合,它们可以在程序中运行一次或多次运行。Python中的函数在其他语言中也叫做过程