Files
DMS/Helper/NlogHelper.cs

98 lines
4.7 KiB
C#
Raw Normal View History

2025-07-06 14:20:56 +08:00
using System.Runtime.CompilerServices;
using NLog;
namespace PMSWPF.Helper;
2025-07-06 15:08:14 +08:00
/// <summary>
/// NLog 日志帮助类,提供简化的日志记录方法,并自动捕获调用者信息。
/// </summary>
2025-07-06 14:20:56 +08:00
public static class NlogHelper
{
2025-07-06 15:08:14 +08:00
/// <summary>
/// 获取当前类的 NLog 日志实例。
/// </summary>
2025-07-06 14:20:56 +08:00
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
2025-07-06 15:08:14 +08:00
/// <summary>
/// 记录一个错误级别的日志。
/// </summary>
/// <param name="msg">日志消息内容。</param>
/// <param name="exception">可选:要记录的异常对象。</param>
/// <param name="callerFilePath">自动捕获:调用此方法的源文件完整路径。</param>
/// <param name="callerMember">自动捕获:调用此方法的成员或属性名称。</param>
/// <param name="callerLineNumber">自动捕获:调用此方法的行号。</param>
public static void Error(string msg, Exception exception = null,
[CallerFilePath] string callerFilePath = "",
[CallerMemberName] string callerMember = "",
[CallerLineNumber] int callerLineNumber = 0)
2025-07-06 14:20:56 +08:00
{
2025-07-06 15:08:14 +08:00
// 使用 using 语句确保 MappedDiagnosticsLogicalContext 在作用域结束时被清理。
// 这对于异步方法尤其重要,因为上下文会随着异步操作的流转而传递。
2025-07-06 14:20:56 +08:00
using (MappedDiagnosticsLogicalContext.SetScoped("CallerFilePath", callerFilePath))
2025-07-06 15:08:14 +08:00
using (MappedDiagnosticsLogicalContext.SetScoped("CallerLineNumber", callerLineNumber))
using (MappedDiagnosticsLogicalContext.SetScoped("CallerMember", callerMember))
2025-07-06 14:20:56 +08:00
{
2025-07-06 15:08:14 +08:00
Logger.Error(exception, msg);
2025-07-06 14:20:56 +08:00
}
}
2025-07-06 15:08:14 +08:00
/// <summary>
/// 记录一个信息级别的日志。
/// </summary>
/// <param name="msg">日志消息内容。</param>
/// <param name="callerFilePath">自动捕获:调用此方法的源文件完整路径。</param>
/// <param name="callerMember">自动捕获:调用此方法的成员或属性名称。</param>
/// <param name="callerLineNumber">自动捕获:调用此方法的行号。</param>
public static void Info(string msg,
[CallerFilePath] string callerFilePath = "",
[CallerMemberName] string callerMember = "",
[CallerLineNumber] int callerLineNumber = 0)
2025-07-06 14:20:56 +08:00
{
using (MappedDiagnosticsLogicalContext.SetScoped("CallerFilePath", callerFilePath))
2025-07-06 15:08:14 +08:00
using (MappedDiagnosticsLogicalContext.SetScoped("CallerLineNumber", callerLineNumber))
using (MappedDiagnosticsLogicalContext.SetScoped("CallerMember", callerMember))
2025-07-06 14:20:56 +08:00
{
2025-07-06 15:08:14 +08:00
Logger.Info(msg);
2025-07-06 14:20:56 +08:00
}
}
2025-07-06 15:08:14 +08:00
/// <summary>
/// 记录一个警告级别的日志。
/// </summary>
/// <param name="msg">日志消息内容。</param>
/// <param name="callerFilePath">自动捕获:调用此方法的源文件完整路径。</param>
/// <param name="callerMember">自动捕获:调用此方法的成员或属性名称。</param>
/// <param name="callerLineNumber">自动捕获:调用此方法的行号。</param>
public static void Warn(string msg,
[CallerFilePath] string callerFilePath = "",
[CallerMemberName] string callerMember = "",
[CallerLineNumber] int callerLineNumber = 0)
2025-07-06 14:20:56 +08:00
{
using (MappedDiagnosticsLogicalContext.SetScoped("CallerFilePath", callerFilePath))
2025-07-06 15:08:14 +08:00
using (MappedDiagnosticsLogicalContext.SetScoped("CallerLineNumber", callerLineNumber))
using (MappedDiagnosticsLogicalContext.SetScoped("CallerMember", callerMember))
2025-07-06 14:20:56 +08:00
{
2025-07-06 15:08:14 +08:00
Logger.Warn(msg);
2025-07-06 14:20:56 +08:00
}
2025-07-06 15:08:14 +08:00
}
/// <summary>
/// 记录一个跟踪级别的日志。
/// </summary>
/// <param name="msg">日志消息内容。</param>
/// <param name="callerFilePath">自动捕获:调用此方法的源文件完整路径。</param>
/// <param name="callerMember">自动捕获:调用此方法的成员或属性名称。</param>
/// <param name="callerLineNumber">自动捕获:调用此方法的行号。</param>
public static void Trace(string msg,
[CallerFilePath] string callerFilePath = "",
[CallerMemberName] string callerMember = "",
[CallerLineNumber] int callerLineNumber = 0)
2025-07-06 14:20:56 +08:00
{
using (MappedDiagnosticsLogicalContext.SetScoped("CallerFilePath", callerFilePath))
2025-07-06 15:08:14 +08:00
using (MappedDiagnosticsLogicalContext.SetScoped("CallerLineNumber", callerLineNumber))
using (MappedDiagnosticsLogicalContext.SetScoped("CallerMember", callerMember))
2025-07-06 14:20:56 +08:00
{
2025-07-06 15:08:14 +08:00
Logger.Trace(msg);
2025-07-06 14:20:56 +08:00
}
}
}