.Net Core NLog日志记录的使用
一、安装NLog.Web.AspNetCore
二、在Program中引用
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
}).UseNLog();//使用NLog
三、编写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="info"
internalLogFile="internal-nlog.txt">
<!--autoReload:修改后自动加载,可能会有延迟-->
<!--throwConfigExceptions:NLog日志系统抛出异常-->
<!--internalLogLevel:内部日志的级别-->
<!--internalLogFile:内部日志保存路径,日志的内容大概就是NLog的版本信息,配置文件的地址等等-->
<!-- define various log targets -->
<!--输出日志的配置,用于rules读取-->
<targets>
<!-- write logs to file -->
<!--将日志写入文件中,fileName可以指定日志生成的路径-->
<target xsi:type="File" name="allfile" fileName="logs/${shortdate}.log"
layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" />
<!--同样是将文件写入日志中,写入的内容有所差别,差别在layout属性中体现。写入日志的数量有差别,差别在路由逻辑中体现-->
<target xsi:type="File" name="servicefile" fileName="logs/services/${shortdate}.log"
layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" />
<target xsi:type="Null" name="blackhole" />
</targets>
<rules>
<!--路由顺序会对日志打印产生影响。路由匹配逻辑为顺序匹配。-->
<!--All logs, including from Microsoft-->
<logger name="ServiceLog" minlevel="Debug" writeTo="servicefile" />
<logger name="*" minlevel="Debug" 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>
四、封装nlog
public enum LogType
{
CommmLog,
ServiceLog
}
public class LogHelper
{
public static void WriteLog(LogType logType, string message)
{
LogManager.GetLogger(logType.ToString()).Log(LogLevel.Info, message.Replace("'", "''"));
}
public static void WriteErrorLog(LogType logType, string message)
{
LogManager.GetLogger(logType.ToString()).Log(LogLevel.Error, message.Replace("'", "''"));
}
public static void WriteLog(LogType logType, string message, LogLevel logLevel)
{
LogManager.GetLogger(logType.ToString()).Log(logLevel, message.Replace("'", "''"));
}
public static void WriteDebugLog(LogType logType, string message)
{
LogManager.GetLogger(logType.ToString()).Log(LogLevel.Debug, message.Replace("'", "''"));
}
}
五、使用
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
LogHelper.WriteDebugLog(LogType.CommmLog, "CommLog");//这里会输出到log目录下
LogHelper.WriteErrorLog(LogType.ServiceLog, "Services");//这里会输出到log/service目录下,用于debug输出
var rng = new Random();
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = rng.Next(-20, 55),
Summary = Summaries[rng.Next(Summaries.Length)]
})
.ToArray();
}