zoukankan      html  css  js  c++  java
  • 从零开始搭建前后端分离的NetCore2.2(EF Core CodeFirst+Autofac)+Vue的项目框架之四Nlog记录日志至数据库

      为什么要进行日志记录呢?为什么要存至数据库呢?只能说日志记录是每个系统都应当有的。

      好的日志记录方式可以提供我们足够多定位问题的依据。查找系统或软件或项目的错误或异常记录。程序在运行时就像一个机器人,我们可以从所记录的日志看出它正在做什么,是不是按预期的设计在做,用来判断运行状态是否是正常的。

      日志中包括主机名、时间、日志级别、日志消息、异常明细、异常类型。

      NetCore在包含 Startup 的项目上使用Nuget包管理工具添加 NLog.Web.AspNetCore 依赖,然后添加 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">
    
      <targets>
    
        <target xsi:type="Database" name="database"
                 connectionString="Data Source=.;Initial Catalog=LogServer;User ID=sa;Password=123456;"
                 commandText="insert into TestLog 
                  ([LogTime], [LogLevel], [Message], 
                  [Host],[ExpType],[MethodName],[ExDetail]) 
                  values (@LogTime,@LogLevel, @Message, 
                  @Host,@ExpType,@MethodName,@ExDetail)
                  ;">
            <parameter name="@Host" layout="${machinename}" />
            <parameter name="@LogTime" layout="${longdate}"/><!--日志发生时间-->
            <parameter name="@LogLevel" layout="${level}"/><!--日志等级-->
            <parameter name="@Message" layout="${message}"/><!--日志信息-->
            <parameter name="@MethodName" layout="${callsite:methodName=true}" />
            <parameter name="@ExpType" layout="${exception:format=type}" />
            <parameter name="@ExDetail" layout="${exception:format=tostring}" />
          </target>
        
      </targets>
    
      <rules>
        <logger name="*" level="Fatal" writeTo="database"/>
        <logger name="*" level="Warn" writeTo="database"/>
        <logger name="*" level="Debug" writeTo="database"/>
        <logger name="*" level="Error" writeTo="database"/>
        <logger name="*" level="Info" writeTo="database"/>
        <logger name="*" level="Trace" writeTo="database"/>
      </rules>
    </nlog>

    当中的 LogServer 是数据库名,TestLog 是表名。

    然后再去数据库创建相对应的库与表,建表语句:

    CREATE TABLE TestLog(
        [Id] [bigint] IDENTITY(1,1) NOT NULL,
        [Host] [varchar](350) NULL,
        [LogTime] [varchar](350) NULL,
        [LogLevel] [varchar](350) NULL,
        [Message] [varchar](max) NULL,
        [MethodName] [varchar](350) NULL,
        [ExpType] [varchar](350) NULL,
        [ExDetail] [varchar](max) NULL,
     CONSTRAINT [PK_TestLog] PRIMARY KEY CLUSTERED 
    (
        [Id] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

    然后在 Startup 的 构造函数中更改如下:在构造函数中添加 IHostingEnvironment env 

     然后 env.ConfigureNLog("NLog.config"); 

            public Startup(IConfiguration configuration, IHostingEnvironment env)
            {
                env.ConfigureNLog("NLog.config");
                Configuration = configuration;
            }

    然后在要添加 LogHelper 类的项目上使用Nuget包管理工具添加  NLog 依赖LogHelper 代码如下:

        /// <summary>
        /// 日志记录类;
        /// 严重级别从小到大:Trace、Debug、Info、Warn、Error、Fatal
        /// </summary>
        public class LogHelper
        {
            /// <summary>
            /// NLog的实例对象
            /// </summary>
            public static NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger();
    
        }

    在项目自带的 ValuesController 中添加一个测试写日志的方法

            [HttpGet]
            [Route("log")]
            public ActionResult TestLog()
            {
                LogHelper.Logger.Trace("测试日志");
                LogHelper.Logger.Debug("测试日志");
                LogHelper.Logger.Info("测试日志");
                LogHelper.Logger.Warn("测试日志");
                LogHelper.Logger.Error("测试日志");
                LogHelper.Logger.Fatal("测试日志");
                return Succeed();
            }

    然后启动项目,访问刚刚那个接口地址,就可以看到日志表中已经添加进去这几个日志了。

    到这里也就完成了日志记录到数据的操作了。

      在下一篇中将介绍如何使用过滤器来进行全局异常处理,处理那些未处理的异常或自定义抛出的异常。

      有需要源码的可通过此 GitHub 链接拉取 觉得还可以的给个 start 哦,谢谢!

  • 相关阅读:
    汉语-词语:判断(逻辑学名词)
    汉语-词语:判断
    汉语-成语:生死有命,富贵在天
    汉语-成语:知人善任
    汉语-成语:真才实学
    太阳系-八大行星:地球
    汉语-词语:宇宙(哲学定义)
    汉语-词语:毅行
    汉语-词语:活在当下
    使用网络监视器(IRSI)捕捉和分析协议数据包
  • 原文地址:https://www.cnblogs.com/levywang/p/coreframe_4.html
Copyright © 2011-2022 走看看