天天看点

AspNetCore3.1日志扩展Nlog

ps:日志是肯定要用的,几翻尝试还是觉得NLog比较方便。虽然感觉很多人用log4net,但我个人还是觉得nlog更好,性能差不多的情况下,nlog明显配置少的多,也更容易懂

1、NuGet管理包,增加NLog.Web.AspNetCore

2、Program中CreateHostBuilder方法里加,代码如下,

//配置nlog
                .ConfigureLogging(logging =>
                {
                    logging.ClearProviders();
                }).UseNLog()
           

示例如图

AspNetCore3.1日志扩展Nlog

3、根目录添加文件,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" xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd" autoReload="true" throwExceptions="false" internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">
  <!-- optional, add some variables https://github.com/nlog/NLog/wiki/Configuration-file#variables -->
  <variable name="myvar" value="myvalue"/>
  <!-- See https://github.com/nlog/nlog/wiki/Configuration-file for information on customizing logging rules and outputs. -->
  <targets>
    <!-- add your targets here See https://github.com/nlog/NLog/wiki/Targets for possible targets. See https://github.com/nlog/NLog/wiki/Layout-Renderers for the possible layout renderers. -->
    <!-- Write events to a file with the date in the filename. <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log" layout="${longdate} ${uppercase:${level}} ${message}" /> -->
    <!--Error保存至文件-->
    <target name="error_file" xsi:type="File" maxArchiveFiles="30" encoding="utf-8" fileName="${basedir}/Logs/${date:yyyyMMdd}_Error.log" archiveFileName="${basedir}/Logs/${date:yyyyMMdd}_Error.{#}.log" archiveDateFormat="yyyyMMdd" archiveAboveSize="104857600" archiveNumbering="Sequence" layout="${date:yyyy-MM-dd HH\:mm\:ss} ${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace}" />
    <!--Trace保存至文件-->
    <target name="trace_file" xsi:type="File" maxArchiveFiles="30" encoding="utf-8" fileName="${basedir}/Logs/${date:yyyyMMdd}_Trace.log" archiveFileName="${basedir}/Logs/${date:yyyyMMdd}_Trace.{#}.log" archiveDateFormat="yyyyMMdd" archiveAboveSize="104857600" archiveNumbering="Sequence" layout="${date:yyyy-MM-dd HH\:mm\:ss} ${uppercase:${level}}: ${message}" />
  </targets>
  <rules>
    <!-- 日志级别:Trace -> Debug-> Information -> Warning -> Error-> Critical-->
    <!-- add your logging rules here -->
    <logger name="*" minlevel="Trace" maxlevel="Warn" writeTo="trace_file" />
    <!--<logger name="*" minlevel="Debug" writeTo="debugger" />-->
    <logger name="*" minlevel="Error" writeTo="error_file" />
    <!-- Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace) to "f" <logger name="*" minlevel="Debug" writeTo="f" /> -->
  </rules>
</nlog>

           

简单解读一下,日志级别比较重要影响是否纳入写入范围,然后是保存文档的地址,其他的可不动。

4、依赖注入后可以使用。示例如下

private readonly ILogger<FirstController> _logger;

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

        public IActionResult Index()
        {


            #region 测试日志记录
            _logger.LogError("这是错误信息");
            _logger.LogInformation("这是提示信息"); 
            #endregion

            return View();
        }
           

继续阅读