前言
继上一篇《.NET7后端框架:一句话启动》后,继续完善后端框架。查日志作为码农的日常,所以我们先引入日志包,这里我们使用 NLog 。
添加依赖项
添加包的方式有两种,一种是通过 NuGet ,一种是直接修改 .csproj 文件
1、通过NuGet引入包
右键 AMO.Core - 依赖项 - 管理NuGet程序包,搜索“NLog”,将 NLog、NLog.Web.AspNetCore两个包安装进来。
2、通过修改 AMO.Core.csproj 文件
点击 AMO.Core 项目,或右键 AMO.Core 项目 - 编辑项目文件,在csproj文件中添加以下代码:
<ItemGroup>
<PackageReference Include="NLog.Web.AspNetCore" Version="5.*" />
<PackageReference Include="NLog" Version="5.*" />
</ItemGroup>
创建一个 nlog.config 文件
右键 AMO.API 项目根目录,创建 nlog.config 文件,文件名全小写。将以下代码复制进去,可以根据自己需要修改日志路径,和日志文件命名规则。
<?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"
autoReload="true"
internalLogLevel="Info"
internalLogFile="${basedir}\Log\internal-nlog.txt">
<!-- enable asp.net core layout renderers -->
<extensions>
<add assembly="NLog.Web.AspNetCore"/>
</extensions>
<!-- the targets to write to -->
<targets>
<!-- write logs to file -->
<target xsi:type="File" name="allfile" fileName="${basedir}\Log\nlog-all-${shortdate}.log"
layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}" />
</targets>
<!-- rules to map from logger name to target -->
<rules>
<!--All logs, including from Microsoft-->
<logger name="*" minlevel="Trace" writeTo="allfile" />
<!--Skip non-critical Microsoft logs and so log only own logs-->
<logger name="Microsoft.*" maxlevel="Info" final="true" />
<!-- BlackHole without writeTo -->
<logger name="*" minlevel="Trace" writeTo="ownFile-web" />
</rules>
</nlog>
修改 AppStart.cs 文件
.NET6 及以上版本配置 NLog 的方式和 .NET6 以下版本略有不同,以下是 .NET6 及以上版本的配置。
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using NLog;
using NLog.Web;
namespace AMO.Core.StartupExtensions
{
/// <summary>
/// 启动程序
/// </summary>
public static class AppStart
{
/// <summary>
/// 运行程序
/// </summary>
/// <param name="builder">WebApplicationBuilder</param>
public static void Run(this WebApplicationBuilder builder)
{
var logger = NLog.LogManager.Setup().GetCurrentClassLogger();
logger.Debug("[启动服务]");
try
{
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
// 配置 NLog
builder.Logging.ClearProviders();
builder.Host.UseNLog();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
}
catch (Exception ex)
{
logger.Error(ex, "[因异常停止服务]");
throw;
}
finally
{
NLog.LogManager.Shutdown();
}
}
}
}
最后
以上,就完成了 NLog 的配置,编译运行,即可在 bin\Debug\net7.0 文件夹下生成 Log 文件夹,里面记录着程序运行过程中的各种日志。
题外
近期我司开源了一套简洁又功能完整的WMS系统: ModernWMS,采用 Vue3 + TS + Vuetify + .Net7 + EF Core 框架。欢迎来踩。
在线体验地址: https://wmsonline.ikeyly.com/
Github: https://github.com/fjykTec/ModernWMS
Gitee:https://gitee.com/modernwms/ModernWMS