优化了打印 日志的功能

This commit is contained in:
2025-07-06 14:20:56 +08:00
parent 1ebe31a26c
commit 6655fb8fd4
4 changed files with 114 additions and 6 deletions

View File

@@ -10,7 +10,7 @@
<target name="logfile"
xsi:type="File"
fileName="logs/${shortdate}.log"
layout="${longdate}|ThreadID=${threadid}|${level:uppercase=true}|${logger}|${message} ${exception:format=tostring}"
layout="${longdate} ThreadID=${threadid} ${level:uppercase=true} ${logger} ${mdlc:CallerFilePath} ${mdlc:CallerLineNumber:whenEmpty=0} ${mdlc:CallerMember} ${message} ${exception:format=tostring}"
archiveFileName="logs/archives/{#}.log"
archiveEvery="Day"
archiveNumbering="Rolling"
@@ -19,7 +19,7 @@
<!-- 控制台日志 -->
<target name="logconsole"
xsi:type="Console"
layout="${date:format=HH\:mm\:ss} ${level} ${message}"/>
layout="${date:format=HH\:mm\:ss} ${level} ${message}${exception:format=tostring}"/>
<!-- SQL Server 目标 -->
<!-- 异步写入日志到数据库 -->
@@ -30,10 +30,10 @@
<commandText>
INSERT INTO nlog (
LogTime, Level, ThreadID,ThreadName,Callsite,CallsiteLineNumber,Message,
Logger, Exception
Logger, Exception, CallerFilePath, CallerLineNumber,CallerMember
) VALUES (
@LogTime, @Level,@ThreadID,@ThreadName,@Callsite,@CallsiteLineNumber,@Message,
@Logger, @Exception
@Logger, @Exception, @CallerFilePath, @CallerLineNumber,@CallerMember
)
</commandText>
@@ -44,9 +44,12 @@
<parameter name="@ThreadName" layout="${threadname}"/>
<parameter name="@Message" layout="${message}"/>
<parameter name="@Callsite" layout="${callsite}"/>
<parameter name="@CallsiteLineNumber" layout="${callsite-linenumber}"/>
<parameter name="@Logger" layout="${logger}"/>
<parameter name="@Exception" layout="${exception:format=ToString}"/>
<parameter name="@CallsiteLineNumber" layout="${callsite-linenumber:whenEmpty=0}"/>
<parameter name="@CallerFilePath" layout="${mdlc:CallerFilePath}"/>
<parameter name="@CallerLineNumber" layout="${mdlc:CallerLineNumber:whenEmpty=0}"/>
<parameter name="@CallerMember" layout="${mdlc:CallerMember}"/>
</target>
</targets>

View File

@@ -60,4 +60,20 @@ public class DbNlog
/// </summary>
[SugarColumn(IsNullable = true)]
public string ThreadName { get; set; }
/// <summary>
/// 线程名称。
/// </summary>
[SugarColumn(IsNullable = true)]
public string CallerFilePath { get; set; }
/// <summary>
/// 线程名称。
/// </summary>
[SugarColumn(IsNullable = true)]
public int CallerLineNumber { get; set; }
/// <summary>
/// 线程名称。
/// </summary>
[SugarColumn(IsNullable = true)]
public string CallerMember { get; set; }
}

82
Helper/NlogHelper.cs Normal file
View File

@@ -0,0 +1,82 @@
using System.Runtime.CompilerServices;
using NLog;
namespace PMSWPF.Helper;
public static class NlogHelper
{
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
public static void Error( string msg,Exception exception=null,[CallerFilePath] string callerFilePath = "",
[CallerMemberName] string callerMember = "",
[CallerLineNumber] int callerLineNumber = 0)
{
// 使用 using 语句确保 MappedDiagnosticsLogicalContext 在作用域结束时被清理
// 这对于异步方法尤其重要,因为上下文会随着异步操作的流转而传递
using (MappedDiagnosticsLogicalContext.SetScoped("CallerFilePath", callerFilePath))
{
using (MappedDiagnosticsLogicalContext.SetScoped("CallerLineNumber", callerLineNumber))
{
using (MappedDiagnosticsLogicalContext.SetScoped("CallerMember", callerMember))
{
Logger.Error(exception,msg);
} // 当 using 块结束时,"user-id" 和 "transaction-id" 会自动从上下文中移除
}
}
}
public static void Info( string msg,[CallerFilePath] string callerFilePath = "",
[CallerMemberName] string callerMember = "",
[CallerLineNumber] int callerLineNumber = 0)
{
// 使用 using 语句确保 MappedDiagnosticsLogicalContext 在作用域结束时被清理
// 这对于异步方法尤其重要,因为上下文会随着异步操作的流转而传递
using (MappedDiagnosticsLogicalContext.SetScoped("CallerFilePath", callerFilePath))
{
using (MappedDiagnosticsLogicalContext.SetScoped("CallerLineNumber", callerLineNumber))
{
using (MappedDiagnosticsLogicalContext.SetScoped("CallerMember", callerMember))
{
Logger.Info(msg);
} // 当 using 块结束时,"user-id" 和 "transaction-id" 会自动从上下文中移除
}
}
}
public static void Warn( string msg,[CallerFilePath] string callerFilePath = "",
[CallerMemberName] string callerMember = "",
[CallerLineNumber] int callerLineNumber = 0)
{
// 使用 using 语句确保 MappedDiagnosticsLogicalContext 在作用域结束时被清理
// 这对于异步方法尤其重要,因为上下文会随着异步操作的流转而传递
using (MappedDiagnosticsLogicalContext.SetScoped("CallerFilePath", callerFilePath))
{
using (MappedDiagnosticsLogicalContext.SetScoped("CallerLineNumber", callerLineNumber))
{
using (MappedDiagnosticsLogicalContext.SetScoped("CallerMember", callerMember))
{
Logger.Warn(msg);
} // 当 using 块结束时,"user-id" 和 "transaction-id" 会自动从上下文中移除
}
}
}
public static void Trace( string msg,[CallerFilePath] string callerFilePath = "",
[CallerMemberName] string callerMember = "",
[CallerLineNumber] int callerLineNumber = 0)
{
// 使用 using 语句确保 MappedDiagnosticsLogicalContext 在作用域结束时被清理
// 这对于异步方法尤其重要,因为上下文会随着异步操作的流转而传递
using (MappedDiagnosticsLogicalContext.SetScoped("CallerFilePath", callerFilePath))
{
using (MappedDiagnosticsLogicalContext.SetScoped("CallerLineNumber", callerLineNumber))
{
using (MappedDiagnosticsLogicalContext.SetScoped("CallerMember", callerMember))
{
Logger.Trace(msg);
} // 当 using 块结束时,"user-id" 和 "transaction-id" 会自动从上下文中移除
}
}
}
}

View File

@@ -15,8 +15,9 @@
<PackageReference Include="NUnit" Version="3.14.0" />
<PackageReference Include="NUnit.Analyzers" Version="3.9.0" />
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0" />
<PackageReference Include="SqlSugarCore" Version="5.1.4.145" />
<PackageReference Include="SqlSugarCore" Version="5.1.4.197" />
<PackageReference Include="SqlSugarCore.MySql" Version="5.1.4.178" />
<PackageReference Include="NLog" Version="6.0.0" />
</ItemGroup>
<ItemGroup>
@@ -27,4 +28,10 @@
<ProjectReference Include="..\PMSWPF.csproj" />
</ItemGroup>
<ItemGroup>
<Content Include="..\Config\nlog.config">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
</Project>