ps:日志是肯定要用的,几翻尝试还是觉得NLog比较方便。虽然感觉很多人用log4net,但我个人还是觉得nlog更好,性能差不多的情况下,nlog明显配置少的多,也更容易懂
1、NuGet管理包,增加NLog.Web.AspNetCore
2、Program中CreateHostBuilder方法里加,代码如下,
//配置nlog
.ConfigureLogging(logging =>
{
logging.ClearProviders();
}).UseNLog()
示例如图
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();
}