提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
昨天试水了下asp.net core 项目的创建,很顺利的就把项目跑起来了,但发现日志只显示在了控制台上,没有动态的创建日志文件,更不要说向日志文件中写入日志信息了,造成以后正式环境的生产和问题排查难度很大,于是决定写一篇日志集成文章,方便后期正式库集成
默认日志效果如下图
一、如何集成后台日志?
Nlog选用: NLog.Extensions.Logging
二、使用步骤
1.引入库
代码如下(示例):
Install-Package NLog.Extensions.Logging -Pre
2.创建一个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"
internalLogLevel="Warn"
internalLogFile="internal-nlog.txt">
<!-- define various log targets -->
<targets>
<!-- write logs to file -->
<target xsi:type="File" name="allfile" fileName="Loggers/${shortdate}.log"
layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" />
<target xsi:type="File" name="ownFile-web" fileName="Loggers/${shortdate}.log"
layout="${longdate}|${logger}|${uppercase:${level}}| ${message} ${exception}" />
<target xsi:type="Null" name="blackhole" />
</targets>
<rules>
<!--All logs, including from Microsoft-->
<logger name="*" minlevel="Trace" writeTo="allfile" />
<!--Skip Microsoft logs and so log only own logs-->
<logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
<logger name="*" minlevel="Trace" writeTo="ownFile-web" />
</rules>
</nlog>
3.创建一个project.json文件
project.json文件内容如下(示例):
{
"publishOptions": {
"include": [
"wwwroot",
"Views",
"appsettings.json",
"web.config",
"Config/nlog.config" //加上nlog配置文件
]
}
}
4.创建一个Startup文件
Startup代码内容如下(示例):
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactor)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
//加载Nlog的nlog.config配置文件
LogManager.LoadConfiguration("Config/nlog.config");
//添加NLog
loggerFactor.AddNLog();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
注意:ConfigureExtensions.AddNLog(ILoggerFactory)”已过时:“Instead use ILoggingBuilder.AddNLog() or IHostBuilder.UseNLog(),发现这个方法过时了,但现在不影响使用,我们跑一下程序看看效果了
5.运行效果
总结
安装NLog.Extensions.Logging nuget 包,修改和创建一些相关文件,成功集成了日志并写入进后台文件,但在.net core 3.1 ,方法提示已经过时:ConfigureExtensions.AddNLog(ILoggerFactory)”已过时:“Instead use ILoggingBuilder.AddNLog() or IHostBuilder.UseNLog(),稍后会出一篇文章进行解决。
除了这种方式,你还可以集成更加强大的开源的日志框架,如:
- Exceptionless - .Net Core开源日志框架
- Exceptionless官网:https://exceptionless.com/
- 说明文档:https://github.com/exceptionless/Exceptionless/wiki/
- Github:https://github.com/exceptionless/Exceptionless/