步骤
1. 添加依赖
①Microsoft.Extensions.DependencyInjection
②NLog.Extensions.Logging(或Microsoft.Extensions.Logging.___)
Tutorial · NLog/NLog Wiki · GitHub
2.添加nlog.config文件(默认名称, 可改为其他名称, 但需要另行配置)
文件的基础格式可从此处获取: Tutorial · NLog/NLog Wiki · GitHubNLog - Advanced and Structured Logging for Various .NET Platforms - Tutorial · NLog/NLog Wikihttps://github.com/NLog/NLog/wiki/Tutorial#configure-nlog-targets-for-output格式参考(关于config文件的说明在注释部分):
<?xml version="1.0" encoding="utf-8" ?>
<!-- XSD manual extracted from package NLog.Schema: https://www.nuget.org/packages/NLog.Schema-->
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xsi:schemaLocation="NLog NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
autoReload="true"
internalLogFile="logs/console-example-internal.log"
internalLogLevel="Info" >
<!-- the targets to write to -->
<targets>
<!-- write logs to file -->
<!-- archiveAboveSize: 日志文件的最大体积(字节数)|maxArchiveFiles: 日志文件的最大数量|maxArchiveDays: 日志文件的最大天数 -->
<target xsi:type="File" name="logfile" fileName="logs/console-example.log"
layout="${longdate}|${level}|${message} |${all-event-properties} ${exception:format=tostring}" />
<target xsi:type="Console" name="logconsole"
layout="${longdate}|${level}|${message} |${all-event-properties} ${exception:format=tostring}" />
</targets>
<!-- rules to map from logger name to target -->
<rules><!-- 从上至下依次匹配 -->
<!-- name: 匹配规则(类名)|minlevel: 最小日志输出等级|maxlevel: 最大日志输出等级|writeTo: 日志输出文件|final=true: 若匹配成功则不再向下匹配 -->
<logger name="*" minlevel="Trace" writeTo="logfile,logconsole"/>
</rules>
</nlog>
3.将nlog.config文件设置为"始终复制"或在项目设置页中将"Never"改为"Always"
示例
Program.cs
internal class Program
{
static void Main(string[] args)
{
ServiceCollection services = new();
services.AddLogging(logBuilder=> {
//logBuilder.AddConsole(); // Microsoft.Extensions.Logging
//logBuilder.SetMinimumLevel(LogLevel.Debug); // Microsoft.Extensions.Logging
logBuilder.AddNLog();
});
services.AddScoped<Example_1>();
using ServiceProvider serviceProvider = services.BuildServiceProvider();
Example_1 example_1 = serviceProvider.GetRequiredService<Example_1>();
example_1.Start();
}
}
Example_1.cs
internal class Example_1
{
ILogger<Example_1> logger;
public Example_1(ILogger<Example_1> logger)
{
this.logger = logger;
}
public void Start()
{
logger.LogDebug("运行中...");
try
{
File.ReadAllText("A:\\text.txt");
logger.LogDebug("文件读取成功");
}
catch (Exception e)
{
logger.LogError(e, "发生错误");
}
logger.LogDebug("结束");
}
}
运行效果