C#使用SqlServer作為日志數(shù)據(jù)庫(kù)的設(shè)計(jì)與實(shí)現(xiàn)
前言
做一個(gè)簡(jiǎn)單的日志數(shù)據(jù)庫(kù)
功能不需要特別繁瑣
主要就是記錄普通日志和錯(cuò)誤日志(INFO,ERROR)
用數(shù)據(jù)庫(kù)作為日志有好處也有壞處
相比于文本來(lái)說(shuō) 更加容易操作
后期查看日志可以根據(jù)時(shí)間篩選
當(dāng)然要求也多了點(diǎn) 沒(méi)那么靈活了
首先你的PC上還要安裝一個(gè)SqlServer
本來(lái)是想用log4net配置去實(shí)現(xiàn)的
發(fā)現(xiàn)配置很繁瑣 決定自己設(shè)計(jì)一個(gè) 肯定有不少不足之處
分為以下幾個(gè)步驟
1.建立日志數(shù)據(jù)表
都用一個(gè)表來(lái)存放,那么字段就要多設(shè)置一個(gè) 用來(lái)區(qū)分不同的日志類型
具體怎么設(shè)置 也很簡(jiǎn)單 字段很簡(jiǎn)單
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ù)庫(kù)記錄日志傳輸模型 /// </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> /// 日志等級(jí)名稱 /// </summary> public string LevelName { get; set; } /// <summary> /// 信息 /// </summary> public string Message { get; set; } /// <summary> ///異常 /// </summary> public string Exception { get; set; } /// <summary> /// 無(wú)參構(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這個(gè)Orm框架
不會(huì)的話可以去學(xué)一下 用數(shù)據(jù)庫(kù)少不了與這個(gè)框架打交道
如果你已經(jīng)初步了解了SqlSugar 請(qǐng)?jiān)倏匆幌滤膫}(cāng)儲(chǔ)概念
然后引入你的程序 如果你不想也可以 你子要可以保證自己的程序可以訪問(wèn)數(shù)據(jù)庫(kù)并且進(jìn)行基本的插入數(shù)據(jù)操作就好了
上面是數(shù)據(jù)庫(kù)表的映射類
那么表的建立和它的Sql語(yǔ)句
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ù)訪問(wèn)層
我這里使用了倉(cāng)儲(chǔ) ,你也可以使用自己的方式
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ù)庫(kù)日志操作 /// 使用SqlServer做數(shù)據(jù)存儲(chǔ) /// 目前提供異常和普通日志記錄 /// 方法待擴(kuò)充 /// 如果遇到數(shù)據(jù)庫(kù)連接不上的問(wèn)題 日志模式回歸到txt模式(規(guī)劃中...) /// </summary> public class RhLogDbHelper { /// <summary> /// 模型 /// </summary> public RhLogRecordDtoSqlServer rhLogRecordDtoSqlServer; /// <summary> /// 私有化數(shù)據(jù)訪問(wèn)器 /// </summary> private RhLogRecordDtoDbAccessSqlServer DbAccess; /// <summary> /// 構(gòu)造器注入 /// </summary> /// <param name="dbAccess">提供相應(yīng)的數(shù)據(jù)訪問(wèn)類</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ù)制
因?yàn)轫?xiàng)目引用不一樣
但可以參考
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é)果
這只是很簡(jiǎn)單的一個(gè)日志數(shù)據(jù)庫(kù)
后面還要加上更多功能
到此這篇關(guān)于C#使用SqlServer作為日志數(shù)據(jù)庫(kù)的設(shè)計(jì)與實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)C#用SqlServer作日志數(shù)據(jù)庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- C#連接SQL數(shù)據(jù)庫(kù)和查詢數(shù)據(jù)功能的操作技巧
- C# TreeView從數(shù)據(jù)庫(kù)綁定數(shù)據(jù)的示例
- C#從數(shù)據(jù)庫(kù)讀取圖片并保存的兩種方法
- C# 創(chuàng)建MDB數(shù)據(jù)庫(kù)、并存放表格數(shù)據(jù)的案例
- C#窗體-數(shù)據(jù)庫(kù)連接及登錄功能的實(shí)現(xiàn)案例
- C#連接SQL Server數(shù)據(jù)庫(kù)的實(shí)例講解
- C#連接Oracle數(shù)據(jù)庫(kù)字符串(引入DLL)的方式
- C# Ado.net實(shí)現(xiàn)讀取SQLServer數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程列表及參數(shù)信息示例
- c#使用FreeSql生產(chǎn)環(huán)境時(shí)自動(dòng)升級(jí)備份數(shù)據(jù)庫(kù)
相關(guān)文章
Unity3D使用UGUI開(kāi)發(fā)原生虛擬搖桿
這篇文章主要為大家詳細(xì)介紹了Unity3D使用UGUI開(kāi)發(fā)原生虛擬搖桿,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04C#使用ADO.Net連接數(shù)據(jù)庫(kù)與DbProviderFactory實(shí)現(xiàn)多數(shù)據(jù)庫(kù)訪問(wèn)
這篇文章介紹了C#使用ADO.Net連接數(shù)據(jù)庫(kù)與DbProviderFactory實(shí)現(xiàn)多數(shù)據(jù)庫(kù)訪問(wèn)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05C#實(shí)現(xiàn)判斷字符串中是否包含中文的方法
這篇文章主要介紹了C#實(shí)現(xiàn)判斷字符串中是否包含中文的方法,非常實(shí)用的功能,需要的朋友可以參考下2014-08-08C#中獲取二維數(shù)組的行數(shù)和列數(shù)以及多維數(shù)組各個(gè)維度的長(zhǎng)度
這篇文章介紹了C#中獲取二維數(shù)組的行數(shù)和列數(shù)以及多維數(shù)組各個(gè)維度的長(zhǎng)度,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12C#基于時(shí)間輪調(diào)度實(shí)現(xiàn)延遲任務(wù)詳解
在很多.net開(kāi)發(fā)體系中開(kāi)發(fā)者在面對(duì)調(diào)度作業(yè)需求的時(shí)候一般會(huì)選擇三方開(kāi)源成熟的作業(yè)調(diào)度框架來(lái)滿足業(yè)務(wù)需求,但是有些時(shí)候可能我們只是需要一個(gè)簡(jiǎn)易的延遲任務(wù)。本文主要分享一個(gè)簡(jiǎn)易的基于時(shí)間輪調(diào)度的延遲任務(wù)實(shí)現(xiàn),需要的可以參考一下2022-12-12