修复日志写入数据库失败问题

This commit is contained in:
2025-09-04 14:52:26 +08:00
parent 653a1d8749
commit c45287fae0
3 changed files with 21 additions and 57 deletions

View File

@@ -1,50 +0,0 @@
using SqlSugar;
using System;
namespace DMS.Infrastructure.Entities;
/// <summary>
/// 数据库实体:对应数据库中的 Logs 表,用于存储应用程序日志。
/// </summary>
public class DbNlog
{
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public long Id { get; set; }
/// <summary>
/// 日志记录的时间戳。
/// </summary>
public DateTime Logged { get; set; }
/// <summary>
/// 日志级别 (e.g., "Info", "Warn", "Error", "Debug")。
/// </summary>
public string Level { get; set; }
/// <summary>
/// 日志消息主体。
/// </summary>
[SugarColumn(Length = -1)] // 映射为NVARCHAR(MAX)或类似类型
public string Message { get; set; }
/// <summary>
/// 异常信息包括堆栈跟踪。如果无异常则为null。
/// </summary>
[SugarColumn(IsNullable = true, Length = -1)]
public string Exception { get; set; }
/// <summary>
/// 记录日志的调用点信息 (文件路径:行号)。
/// </summary>
public string CallSite { get; set; }
/// <summary>
/// 记录日志的方法名。
/// </summary>
public string MethodName { get; set; }
/// <summary>
/// (用于聚合) 此条日志在指定时间窗口内被触发的总次数。默认为1。
/// </summary>
public int AggregatedCount { get; set; } = 1;
}

View File

@@ -34,7 +34,6 @@ public class InitializeRepository : IInitializeRepository
public void InitializeTables() public void InitializeTables()
{ {
_db.DbMaintenance.CreateDatabase(); // 创建数据库(如果不存在) _db.DbMaintenance.CreateDatabase(); // 创建数据库(如果不存在)
_db.CodeFirst.InitTables<DbNlog>();
_db.CodeFirst.InitTables<DbDevice>(); _db.CodeFirst.InitTables<DbDevice>();
_db.CodeFirst.InitTables<DbVariableTable>(); _db.CodeFirst.InitTables<DbVariableTable>();
_db.CodeFirst.InitTables<DbVariable>(); _db.CodeFirst.InitTables<DbVariable>();

View File

@@ -2,8 +2,8 @@
<nlog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <nlog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
autoReload="true" autoReload="true"
internalLogLevel="Info" internalLogLevel="Trace"
internalLogFile="internal-nlog.txt"> internalLogFile="logs/internal-nlog.txt">
<targets> <targets>
<!-- 文件日志 --> <!-- 文件日志 -->
@@ -20,15 +20,30 @@
<target name="logconsole" <target name="logconsole"
xsi:type="Console" xsi:type="Console"
layout="${date:format=HH\:mm\:ss} ${level} ${threadid} ${message}${exception:format=tostring}"/> layout="${date:format=HH\:mm\:ss} ${level} ${threadid} ${message}${exception:format=tostring}"/>
<!-- SQL Server 目标 -->
<!-- 异步写入日志到数据库 --> <!-- 数据库日志 -->
<target name="database" <target name="database"
xsi:type="Database" xsi:type="Database"
dbProvider="MySql.Data.MySqlClient.MySqlConnection, MySql.Data" dbProvider="MySql.Data.MySqlClient.MySqlConnection, MySql.Data"
connectionString="server=127.0.0.1;port=3306;user=root;password=Pgw15221236646; database=dms_test; "> connectionString="server=127.0.0.1;port=3306;user=root;password=Pgw15221236646; database=dms_test; ">
<commandText> <commandText>
INSERT INTO dbnlog ( CREATE TABLE IF NOT EXISTS nlog (
ID INT AUTO_INCREMENT PRIMARY KEY,
LogTime DATETIME,
Level VARCHAR(50),
ThreadID INT,
ThreadName VARCHAR(100),
Callsite VARCHAR(300),
CallsiteLineNumber INT,
Message TEXT,
Logger VARCHAR(300),
Exception TEXT,
CallerFilePath VARCHAR(300),
CallerLineNumber INT,
CallerMember VARCHAR(100)
);
INSERT INTO nlog (
LogTime, Level, ThreadID,ThreadName,Callsite,CallsiteLineNumber,Message, LogTime, Level, ThreadID,ThreadName,Callsite,CallsiteLineNumber,Message,
Logger, Exception, CallerFilePath, CallerLineNumber,CallerMember Logger, Exception, CallerFilePath, CallerLineNumber,CallerMember
) VALUES ( ) VALUES (