C#使用SqlServer作為日志數(shù)據(jù)庫的設(shè)計與實現(xiàn)
前言
做一個簡單的日志數(shù)據(jù)庫
功能不需要特別繁瑣
主要就是記錄普通日志和錯誤日志(INFO,ERROR)
用數(shù)據(jù)庫作為日志有好處也有壞處
相比于文本來說 更加容易操作
后期查看日志可以根據(jù)時間篩選
當然要求也多了點 沒那么靈活了
首先你的PC上還要安裝一個SqlServer
本來是想用log4net配置去實現(xiàn)的
發(fā)現(xiàn)配置很繁瑣 決定自己設(shè)計一個 肯定有不少不足之處
分為以下幾個步驟
1.建立日志數(shù)據(jù)表
都用一個表來存放,那么字段就要多設(shè)置一個 用來區(qū)分不同的日志類型
具體怎么設(shè)置 也很簡單 字段很簡單
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數(shù)據(jù)庫記錄日志傳輸模型
/// </summary>
[SugarTable("LogRecord")]
public class RhLogRecordDtoSqlServer
{
/// <summary>
/// 索引
/// </summary>
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]//主鍵并且自增 (string不能設(shè)置自增)
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>
/// 無參構(gòu)造器
/// </summary>
public RhLogRecordDtoSqlServer()
{
}
/// <summary>
/// 有參構(gòu)造器
/// </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框架
不會的話可以去學(xué)一下 用數(shù)據(jù)庫少不了與這個框架打交道
如果你已經(jīng)初步了解了SqlSugar 請再看一下它的倉儲概念
然后引入你的程序 如果你不想也可以 你子要可以保證自己的程序可以訪問數(shù)據(jù)庫并且進行基本的插入數(shù)據(jù)操作就好了
上面是數(shù)據(jù)庫表的映射類
那么表的建立和它的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.建立相關(guān)的數(shù)據(jù)訪問層
我這里使用了倉儲 ,你也可以使用自己的方式
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 數(shù)據(jù)庫日志操作
/// 使用SqlServer做數(shù)據(jù)存儲
/// 目前提供異常和普通日志記錄
/// 方法待擴充
/// 如果遇到數(shù)據(jù)庫連接不上的問題 日志模式回歸到txt模式(規(guī)劃中...)
/// </summary>
public class RhLogDbHelper
{
/// <summary>
/// 模型
/// </summary>
public RhLogRecordDtoSqlServer rhLogRecordDtoSqlServer;
/// <summary>
/// 私有化數(shù)據(jù)訪問器
/// </summary>
private RhLogRecordDtoDbAccessSqlServer DbAccess;
/// <summary>
/// 構(gòu)造器注入
/// </summary>
/// <param name="dbAccess">提供相應(yīng)的數(shù)據(jù)訪問類</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);
}
}
}
這些內(nèi)容不可直接復(fù)制
因為項目引用不一樣
但可以參考
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.結(jié)果

這只是很簡單的一個日志數(shù)據(jù)庫
后面還要加上更多功能
到此這篇關(guān)于C#使用SqlServer作為日志數(shù)據(jù)庫的設(shè)計與實現(xiàn)的文章就介紹到這了,更多相關(guān)C#用SqlServer作日志數(shù)據(jù)庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- C#連接SQL數(shù)據(jù)庫和查詢數(shù)據(jù)功能的操作技巧
- C# TreeView從數(shù)據(jù)庫綁定數(shù)據(jù)的示例
- C#從數(shù)據(jù)庫讀取圖片并保存的兩種方法
- C# 創(chuàng)建MDB數(shù)據(jù)庫、并存放表格數(shù)據(jù)的案例
- C#窗體-數(shù)據(jù)庫連接及登錄功能的實現(xiàn)案例
- C#連接SQL Server數(shù)據(jù)庫的實例講解
- C#連接Oracle數(shù)據(jù)庫字符串(引入DLL)的方式
- C# Ado.net實現(xiàn)讀取SQLServer數(shù)據(jù)庫存儲過程列表及參數(shù)信息示例
- c#使用FreeSql生產(chǎn)環(huán)境時自動升級備份數(shù)據(jù)庫
相關(guān)文章
c# 實現(xiàn)圓形的進度條(ProgressBar)
這篇文章主要介紹了c# 如何實現(xiàn)圓形的進度條(ProgressBar),幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下2021-03-03
非常實用的C#字符串操作處理類StringHelper.cs
這篇文章主要為大家詳細介紹了非常實用的C#字符串操作處理類StringHelper.cs,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07
c#創(chuàng)建windows服務(wù)(Windows Services)詳細步驟
這篇文章主要介紹了c#創(chuàng)建windows服務(wù)(Windows Services)詳細步驟,大家參考使用吧2013-12-12
C# WinForms存儲過程操作數(shù)據(jù)庫的實例講解
這篇文章主要介紹了C# WinForms存儲過程操作數(shù)據(jù)庫的實例,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-04-04

