欢迎光临
个人技术文档整理

.NET Core 中使用NLog之基础使用

NuGit安装 Nlog

Install-Package  ​​​​​​​Nlog

1、Program文件

  public class Program
    {
        public static void Main(string[] args)
        {
            // 设置读取指定位置的nlog.config文件
            NLogBuilder.ConfigureNLog("XmlConfig/nlog.config");
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                })
            .ConfigureLogging(logging =>
            {
                //logging.ClearProviders(); //移除已经注册的其他日志处理程序
                //logging.SetMinimumLevel(LogLevel.Trace); //设置最小的日志级别
            }).UseNLog();
    }

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">

	<variable name="layout_time_MM" value="${date:format=yyyyMM}" />
	<variable name="layout_time_ddHH" value="${date:format=dd-HH}" />
	<variable name="layout_time_ss" value="[${date:format=MM-dd HH\:mm\:ss}]" />

	<variable name="layout_methodName" value="【${callsite:className=True:fileName=True:methodName=true:includeSourcePath=False}】" />
	<variable name="layout_errorcontent" value="${layout_time_ss}:${message} | ${exception} ${stacktrace}" />
	<variable name="layout_errorcontent2" value="[${longdate}][${level:uppercase=true:padding=5}] ${message} | ${onexception:${exception:format=message} ${newline} ${stacktrace}" />

	<targets>
		<!--屏幕打印消息-->
		<target name="console" xsi:type="ColoredConsole" layout="[${date:format=HH\:mm\:ss}] ${message}"/>

		<!--vs输出窗口  上线删除-->
		<!--<target name="vsdebugger" xsi:type="Debugger" layout="[${date:format=HH\:mm\:ss}][${level:padding=5:uppercase=true}] ${message}"/>-->

		<!--保存debug至文件   上线删除 -->
		<target name="debugger" xsi:type="File" maxArchiveFiles="30"
						fileName="${basedir}/Logs/${shortdate}/debug.txt"
						layout="[${date:format=HH\:mm\:ss}][${level:padding=5:uppercase=true}] ${message}"/>

		<!--保存info至文件 上线删除-->
		<target name="info_file" xsi:type="File" maxArchiveFiles="30" fileName="${basedir}/Logs/${shortdate}/info.txt" layout="[${longdate}][${level:uppercase=true:padding=5}] ${message} | ${exception}" />



		<!--保存erorr至文件-->
		<target name="error_file" xsi:type="File" maxArchiveFiles="30"
						fileName="${basedir}/Logs/Error/${layout_time_MM}/${layout_time_ddHH}${event-properties:item=myName}.log"
						layout="${layout_errorcontent}" />

		<!--保存fatal至文件-->
		<target name="fatal_file" xsi:type="File" maxArchiveFiles="30"
						fileName="${basedir}/Logs/Fatal/${layout_time_MM}/${layout_time_ddHH}${event-properties:item=myName}.log"
						layout="${layout_errorcontent}" />




	</targets>
	<rules>
		<logger name="*" writeTo="console" />
		<!--<logger name="*" minlevel="Trace" writeTo="vsdebugger"/>-->
		<logger name="*" levels="Debug" writeTo="debugger" />
		<logger name="*" levels="Info" writeTo="info_file" />


		<logger name="*" levels="Error" writeTo="error_file" />
		<logger name="*" levels="Fatal" writeTo="fatal_file" />

	</rules>
</nlog>

日志处理类

/// <summary>
    /// 日志处理类
    /// </summary>
    public class LogHelper
    { 
        private static readonly Logger _logger = LogManager.GetCurrentClassLogger();
        private static string _loggerFileName = "myName";
       

        public static void Debug(object msg, Exception exp = null)
        {
            if (exp == null)
                _logger.Debug("#" + msg);
            else
                _logger.Debug("#" + msg + "  " + exp.ToString());
        }

        public static void Info(object msg, Exception exp = null)
        {
            if (exp == null)
                _logger.Info("#" + msg);
            else
                _logger.Info("#" + msg + "  " + exp.ToString());
        }


        public static void Warn(object msg, Exception exp = null)
        {
            if (exp == null)
                _logger.Warn("#" + msg);
            else
                _logger.Warn("#" + msg + "  " + exp.ToString());
        }

        #region 错误
        public static void Error(object msg, Exception exp = null)
        {
            if (exp == null)
                _logger.Error("#" + msg);
            else
                _logger.Error("#" + msg + "  " + exp.ToString());
        }

        public static void Error(string msg, string myName)
        {
            LogEventInfo logEvent = new LogEventInfo(LogLevel.Info, _logger.Name, "#" + msg);
            logEvent.Properties[_loggerFileName] = " " + myName;
            _logger.Log(logEvent);
        }

        #endregion
    }

调用方法

 [HttpGet]
        public string Error()
        {
            try
            {
                var a = "你好";
                var b = Convert.ToInt32(a);
            }
            catch (Exception ex)
            {
                LogHelper.Error("报错了", ex);
            }

            return "OK-" + DateTime.Now;
        }

 

赞(2)