为.Net core 加入日志功能

2021-03-04 17:59:42 浏览数 (4)

前文再续,书接上一篇;话说上一篇,我们已经顺利将.Net Core的框架应用部署到IS上,但在实际使用中发现出现很多小问题,又不知道是哪个环境出问题;于是想查一下问题,而发现这个框架的日志只保留登陆的信息,对出错信息没有保存。并且日志是直接写数据库,这样个人感觉不是太好。于是自己动手加入日志功能。加入日志功能不外乎Log4Net这个已经用得比较烂,于是不走平常路用另一个老牌的日志插件Nlog,至于Nlog有什么优缺点,我这里就不多说,自己百度。我们接下来说说怎么整合。

1、通过控制台命令进行安装: Install-Package Nlog

2、加入Config:Install-Package Nlog.Config(也可以自己在目录建立)

这个Nlog.Config主要是Nlog的设置,如果自己建立,可以按我以下的内容;

代码语言:javascript复制
<?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="logs/nlog-internal.log">

	<variable name="myvar" value="myvalue"/>

	<targets async="true">
		<!--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} ${appdomain} | ${uppercase:${level}}: ${message}" />
		<!--API保存至文件-->
		<target name="api_file" xsi:type="File" maxArchiveFiles="30" encoding="utf-8"
				fileName="${basedir}/Logs/${date:yyyyMMdd}_api.log"
				archiveFileName="${basedir}/Logs/${date:yyyyMMdd}_api.{#}.log"
				archiveDateFormat="yyyyMMdd"
				archiveAboveSize="104857600"
				archiveNumbering="Sequence"
				layout="${date:yyyy-MM-dd HH:mm:ss} ${appdomain} | ${uppercase:${level}}: ${message}" />
	</targets>

	<rules>
		<logger name="*" minlevel="Debug" writeTo="api_file" />
		<logger name="*" minlevel="Trace" maxlevel="Warn" writeTo="trace_file" />
		<logger name="*" minlevel="Error" writeTo="error_file" />
		
	</rules>
</nlog>

3、建立一个调用的类,方便调用,内容如下:

代码语言:javascript复制
using NLog;
using NLog.Config;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Threading.Tasks;
using System.Xml.Linq;

namespace MVVM.CommonUtils
{
    public enum LogType
    {
        [Description("网站")]
        Web,
        [Description("数据库")]
        DataBase,
        [Description("Api接口")]
        ApiRequest,
        [Description("中间件")]
        Middleware
    }
    public static class NLogUtil
    {      
        public static Logger fileLogger = LogManager.GetLogger("logfile");      
        /// <summary>
        /// 写日志到文件
        /// </summary>
        /// <param name="logLevel">日志等级</param>
        /// <param name="logType">日志类型</param>
        /// <param name="message">信息</param>
        /// <param name="exception">异常</param>
        public static void WriteFileLog(LogLevel logLevel, LogType logType, string message, Exception exception = null)
        {            
            LogEventInfo theEvent = new LogEventInfo(logLevel, fileLogger.Name, message);
            theEvent.Properties["LogType"] = logType.ToString();
            theEvent.Exception = exception;
            fileLogger.Log(theEvent);            
        }
    }
}

4、就是程序中调用:

代码语言:javascript复制
NLogUtil.WriteFileLog(NLog.LogLevel.Info, LogType.ApiRequest, "成功写入");

这样就会自动生成相关的日志,有个地方友情提醒一下,记得将NLog.Config中的复制到输出目录,选择“始终复制”。至于更多的功能可以自己去研究一下,这里只是当个入门。

如果有什么疑问可以留意共同研究~最后记得点个赞。。

1 人点赞