剑轩

.net core3.x使用nlog

电脑版发表于:2021/1/6 17:20


下载依赖:

<ItemGroup>
  <PackageReference Include="Nlog" Version="4.7.13" />
  <PackageReference Include="NLog.Web.AspNetCore" Version="4.14.0" />
</ItemGroup>

或者使用命令下载:

Install-Package NLog
Install-Package NLog.Web.AspNetCore



添加一个nlog配置文件


配置文件选择:web配置文件即可


如下:

<?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>
    <!--这个目标:最终输出文件类型, 位于根目录中得logs文件夹中, 名称以每日得时间一次生成log文件 , layout: 这个选项为生成的格式-->
    <target xsi:type="File" name="file" 
            fileName="${basedir}/logs/nlog-aj-${shortdate}.log"
            layout="${longdate} ${uppercase:${level}} ${message}" />
  </targets>

  <rules>
    <!--设定了一个Debug得路由, 最终指向了一个f名称得目标 -->
    <logger name="*" minlevel="Debug" writeTo="file" />
  </rules>
</nlog>

主要是两个内容,一个是规则配置,比如设定日志等级,然后有个writeTo和上面的目标进行关联,目标可以设置文件名的规则,输出内容的规则等。
比如输出具体某几个日志等级

<logger name="*" level="Debug,Warn,Trace,Error,Fatal" writeTo="seq" />


name - 日志源/记录者的名字 (允许使用通配符*)

minlevel - 该规则所匹配日志范围的最低级别

maxlevel - 该规则所匹配日志范围的最高级别

level - 该规则所匹配的单一日志级别

levels - 该规则所匹配的一系列日志级别,由逗号分隔。

writeTo - 规则匹配时日志应该被写入的一系列目标,由逗号分隔。

final - 标记当前规则为最后一个规则。其后的规则即时匹配也不会被运行。

小例子:

<logger name="Name.Space.Class1" minlevel="Debug" writeTo="f1" /> - 名字空间Name.Space下的Class1这个类的所有级别等于或者高于Debug的日志信息都写入到“f1”这个目标里。

<logger name="Name.Space.Class1" levels="Debug,Error" writeTo="f1" /> -名字空间Name.Space下的Class1这个类的所有级别等于Debug或Error的日志信息都写入到“f1”这个目标里。

<logger name="Name.Space.*" writeTo="f3,f4" /> -名字空间Name.Space下所有类的所有级别的日志信息都写入到“f3”和“f4”这两个目标里。

<logger name="Name.Space.*" minlevel="Debug" maxlevel="Error" final="true" /> - 名字空间Name.Space下所有类的、级别在Debug和Error之间的(包括Debug,Info,Warn,Error) 日志信息都不会被记录(因为这条规则没有定义writeTo),同时其它后续规则也都会被忽略(因为这里设置了final="true")。



使用日志,日志等级

如下:

public IActionResult Index(string value)
{
    var nlog = NLog.LogManager.GetCurrentClassLogger();

    nlog.Info("一般信息");
    nlog.Error("错误信息");
    nlog.Warn("警告信息");
    nlog.Trace("Trace信息");
    nlog.Debug("调试信息");

    return View();
}

日志输出位置默认在\Debug\netcoreapp3.1\logs下面。



根据上图我们可以看到日志输出内容,但是为什么没有看到Trace信息呢。是因为日志等级的原因,上面的日志等级设置是minlevel="Debug",最低日志等级是Debug所以输出不了Trace信息。我们可以在配置一个规则,把日志等级修改成Trace即可。

修改配置文件为:

<?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>
		<target xsi:type="File" name="fffff"
				fileName="${basedir}/logs/nlog-aj-${shortdate}.log"
				layout="${longdate} ${uppercase:${level}} ${message}" />

		<target xsi:type="File" name="xxx"
		fileName="${basedir}/logs/${shortdate}.log"
		layout="${longdate} ${uppercase:${level}} ${message}" />
	</targets>

	<rules>
		<logger name="*" minlevel="Debug" writeTo="fffff" />
		<logger name="*" minlevel="Trace" writeTo="xxx" />
	</rules>
</nlog>

我们增加了一个规则和输出目标,其中一个日志最小等级是Bebug,另外一个是Trace。上面两个目标的文件名也不一样。
生成的日志文件如下:


日志最小等级是Trace的内容:可以看到所有日志信息都已经输出了


日志最小等级是Trace的内容:


其他的什么日志等级可以按自己的需要配置,可以配置最低日志等级,最高日志等级,具体的某个或者某几个日志等级,比较灵活!



添加NLOG依赖,让项目默认的日志使用NLOG作为日志输出
如下:

如果不要这步.net core自带的日志输出就不会在nlog里边


使用.net core自带的日志输出:

因为我们配置了项目日志使用nlog所以这个日志的输出也是在nlog里边

private readonly ILogger<HomeController> _logger;

public HomeController(ILogger<HomeController> logger)
{
    _logger = logger;
}

public IActionResult Index()
{
    _logger.LogInformation("自带log测试_普通信息日志");
    _logger.LogDebug("自带log测试_调试日志");
    _logger.LogError("自带log测试_错误日志");
    _logger.LogWarning("自带log测试_警告日志");
    _logger.LogTrace("自带log测试_跟踪日志");

    return View();
}

然后我们看看日志输出:自带的输出日志也有了


但是我们日志写了5个,这里只输出了3个,缺少了trace和debug。自带的控制台日志里边也没有trace和debug

和nlog的日志等级设置一样,这也是因为日志等级的问题,.net core自带的日志等级设置是在appsettings.json配置文件
关于日志等级的设置:

{
  "Logging": {
    "LogLevel": {
      "Default": "Trace",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*"
}

一般设置默认情况下的”Default”: “Trace”即可,默认”Default”设置是Information所以会缺少。

注意:还请确保检查任何特定于环境的应用程序设置,比如appsettings.development.json,开发环境下应该是设置appsettings.development.json而不是appsettings.json
我们把appsettings.development.json的Default日志等级设置一下:设置成最低等级Trace

然后在看日志输出:会发现所有的都能看到了



.net core项目的默认日志使用nlog作为日志框架后,日志等级会先受到自带日志等级的配置影响,然后也会收到nlog日志等级配置的影响


关于TNBLOG
TNBLOG,技术分享。技术交流:群号677373950
ICP备案 :渝ICP备18016597号-1
App store Android
精彩评论
{{item.replyName}}
{{item.content}}
{{item.time}}
{{subpj.replyName}}
@{{subpj.beReplyName}}{{subpj.content}}
{{subpj.time}}
猜你喜欢