.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();
  }

 

posted @ 2025-03-07 16:04  经过你的世界  阅读(34)  评论(0)    收藏  举报