添加项目文件。

This commit is contained in:
hsc
2025-12-18 17:26:20 +08:00
parent 942fef0e13
commit 69aaa5c4e5
40 changed files with 2053 additions and 0 deletions

19
Logger/Logger.csproj Normal file
View File

@@ -0,0 +1,19 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="NLog" Version="6.0.5" />
</ItemGroup>
<ItemGroup>
<None Update="Nlog.config">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>

42
Logger/LoggerHelper.cs Normal file
View File

@@ -0,0 +1,42 @@
using NLog;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace Logger
{
public static class LoggerHelper
{
public static readonly ILogger Logger = LogManager.GetLogger("InfoLogger");
public static readonly ILogger sqlLogger = LogManager.GetLogger("SqlLogger");
// 解析堆栈,找到项目文件路径和行号
public static string GetProjectStackLine(string stackTrace)
{
if (string.IsNullOrEmpty(stackTrace))
return "未知位置";
var lines = stackTrace.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
foreach (var line in lines)
{
// 匹配你项目的命名空间路径
if (line.Contains("BaseFrame"))
{
// 提取 "in 文件路径:line 行号"
var match = Regex.Match(line, @"in (.+?):line (\d+)");
if (match.Success)
{
return match.Value; // 返回类似 C:\...\MainViewModel.cs:line 37
}
return line.Trim();
}
}
return lines[0].Trim(); // 如果找不到就返回第一条
}
}
}

37
Logger/Nlog.config Normal file
View File

@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!-- 定义目标 -->
<targets>
<!-- SQL 日志 -->
<target name="sqlLog" xsi:type="File"
fileName="Logs/${shortdate}_sql.txt"
layout="${longdate} [${level}] [ThreadId:${threadid}] ${message} ${exception}"
encoding="utf-8" />
<!-- Info 日志 -->
<target name="infoLog" xsi:type="File"
fileName="Logs/${shortdate}_info.txt"
layout="${longdate} [${level}] [ThreadId:${threadid}] ${message} ${exception}"
encoding="utf-8" />
<!-- Warn 日志 -->
<target name="warnLog" xsi:type="File"
fileName="Logs/${shortdate}_warn.txt"
layout="${longdate} [${level}] [ThreadId:${threadid}] ${message} ${exception}"
encoding="utf-8" />
</targets>
<!-- 定义日志规则 -->
<rules>
<!-- SQL 日志规则 -->
<logger name="SqlLogger" minlevel="Info" writeTo="sqlLog" />
<!-- Info 日志规则 -->
<logger name="InfoLogger" minlevel="Info" maxlevel="Info" writeTo="infoLog" />
<!-- Warn 日志规则 -->
<logger name="*" minlevel="Warn" writeTo="warnLog" />
</rules>
</nlog>