Nlog 集成到WebApi
前言
之前的这篇文章中介绍了,桌面程序是如何使用Nlog的
但是如果是WebApi,有一点不同,总的来说,前期的配置工作变多了。其他的不变。
安装
首先是安装包:建议5以上版本
nlog.config
然后准备一个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"
throwExceptions="true"
internalLogLevel="Off"
internalLogFile="Logs\internal-nlog-AspNetCore.txt">
<targets>
<!--控制台输出-->
<target name="console" xsi:type="ColoredConsole" layout="${date:format=HH\:MM\:ss} ${logger} ${message}"/>
<!--调试输出,带行号-->
<target name="debug_file"
xsi:type="File"
fileName="${basedir}/Logs/${shortdate}/Debug/log.txt"
maxArchiveFiles="30"
layout="【${longdate}】${level:uppercase=false} ${callsite:className=True:fileName=True:includeSourcePath=False:methodName=False}:${message}" />
<!--错误输出,带行号-->
<target name="error_file"
xsi:type="File"
fileName="${basedir}/Logs/${shortdate}/log.txt"
maxArchiveFiles="30"
layout="【${longdate}】${level:uppercase=false} ${callsite:className=True:fileName=True:includeSourcePath=False:methodName=False}:${message}" />
</targets>
<rules>
<logger name="System.*" finalMinLevel="Warn"/>
<logger name="Microsoft.*" finalMinLevel="Warn"/>
<logger name="Microsoft.Hosting.Lifetime*" finalMinLevel="Info"/>
<logger name="*" minlevel="Trace" writeTo="console" />
<logger name="*" minlevel="Debug" writeTo="debug_file" />
<logger name="*" minlevel="Error" writeTo="error_file" />
</rules>
</nlog>
对Config的简单说明
autoReload="true"
在配置文件头部的这个属性,如果有True,在网站跑的过程中,可以随时变更nlog.config文件,随时生效。
throwExceptions="true"
这个前期对nlog.config文件如果有写法错误,或是项目中对日志模块有什么异常错误的话,会主动抛出来,这个对前期集成NLog模块或写配置文件时有用。
<logger name="System.*" finalMinLevel="Warn"/> <logger name="Microsoft.*" finalMinLevel="Warn"/> <logger name="Microsoft.Hosting.Lifetime*" finalMinLevel="Info"/>
这个主要是过滤掉一些WebApi内部的一些打印信息,不然你的打印会带出来其他的一堆打印。但是程序启动的WebApi的一些内容,目前我发现过滤不掉。不过之后就没有了。
修改Program.cs
最关键的一句话
builder.Logging.AddNLog("nlog.config");
Program.cs中加入这句
这就相当于注册,为注入做准备,不然控制器里的_logger也无法输出log到文件
注入之后,控制器里直接用就好了:
控制器使用情况
Program.cs的全部内容如下:
using MySocketLib.TcpSvr;
using NLog;
using NLog.Web;
var logger = NLog.LogManager.Setup().LoadConfigurationFromAppSettings().GetCurrentClassLogger();
logger.Debug("init main");
try
{
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
//为了返回任意形式xml,需要这个,需要安装包:Microsoft.AspNetCore.Mvc.WebApiCompatShim
builder.Services.AddMvc().AddWebApiConventions();
builder.Logging.AddNLog("nlog.config");
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseAuthorization();
app.MapControllers();
//启动TCP
TcpSvrCtrl.Run();
app.Run();
}
catch (Exception exception)
{
// NLog: catch setup errors
logger.Error(exception, "Stopped program because of exception");
throw;
}
finally
{
// Ensure to flush and stop internal timers/threads before application-exit (Avoid segmentation fault on Linux)
NLog.LogManager.Shutdown();
}
作者:宋桓公
出处:http://www.cnblogs.com/douzi2/
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2021-11-04 【wpf】Initialized 事件的使用
2020-11-04 Vagrant 创建的虚拟机 如何用xshell登陆(初步记录)
2013-11-04 Verilog中的有符号计算之认知补码