从零开始搭建前后端分离的NetCore2.2(EF Core CodeFirst+Autofac)+Vue的项目框架之四Nlog记录日志至数据库
2019-08-27 15:06
1706 查看
为什么要进行日志记录呢?为什么要存至数据库呢?只能说日志记录是每个系统都应当有的。
好的日志记录方式可以提供我们足够多定位问题的依据。查找系统或软件或项目的错误或异常记录。程序在运行时就像一个机器人,我们可以从所记录的日志看出它正在做什么,是不是按预期的设计在做,用来判断运行状态是否是正常的。
日志中包括主机名、时间、日志级别、日志消息、异常明细、异常类型。
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(); }
然后启动项目,访问刚刚那个接口地址,就可以看到日志表中已经添加进去这几个日志了。
到这里也就完成了日志记录到数据的操作了。
在下一篇中将介绍如何使用过滤器来进行全局异常处理,处理那些未处理的异常或自定义抛出的异常。
有需要源码的在下方评论或私信~给我的SVN访客账户密码下载,代码未放在GitHub上。
相关文章推荐
- 从壹开始前后端分离【 .NET Core2.0 Api + Vue 2.0 + AOP + 分布式】框架之六 || API项目整体搭建 6.1 仓储
- 从壹开始前后端分离【 .NET Core2.0 Api + Vue 2.0 + AOP + 分布式】框架之八 || API项目整体搭建 6.3 异步泛型+依赖注入初探
- ASP.NET Core 实战:使用ASP.NET Core Web API 和 Vue.js 搭建前后端分离项目
- 从壹开始前后端分离【 .NET Core2.0 Api + Vue 2.0 + AOP + 分布式】框架之十 || AOP面向切面编程浅解析:简单日志记录 + 服务切面缓存
- python 记录Django与Vue前后端分离项目搭建
- 从壹开始前后端分离【 .NET Core2.0 Api + Vue 2.0 + AOP + 分布式】框架之二 || 后端项目搭建
- 从壹开始前后端分离【 .NET Core2.0 Api + Vue 2.0 + AOP + 分布式】框架之七 || API项目整体搭建 6.2 轻量级ORM
- ASP.NET Core 实战:使用 ASP.NET Core Web API 和 Vue.js 搭建前后端分离项目
- Maven多模块,Dubbo分布式服务框架,SpringMVC,前后端分离项目,基础搭建,搭建过程出
- Maven多模块,Dubbo分布式服务框架,SpringMVC,前后端分离项目,基础搭建,搭建过程出现的问题
- EF Core使用SQL调用返回其他类型的查询 ASP.NET Core 2.0 使用NLog实现日志记录 CSS 3D transforms cSharp:use Activator.CreateInstance with an Interface? SqlHelper DBHelper C# Thread.Abort方法真的让线程停止了吗? 注意!你的Thread.Abort方法真
- 手把手教你从零开始搭建SpringBoot后端项目框架
- 在silverlight中EnitityFramework4.1框架下的以codefirst模式进行后台处理的SQL日志记录方法
- Django+Vue.js搭建前后端分离项目的示例
- C# CodeFirst(EF框架)代码优先创建数据库
- 【基于EF Core的Code First模式的DotNetCore快速开发框架】完成对DB First代码生成的支持
- 从零开始,搭建博客系统MVC5+EF6搭建框架(3),添加Nlog日志、缓存机制(MemoryCache、RedisCache)、创建控制器父类BaseController
- Yii框架和Vue的完美结合构建前后端分离项目
- 前后端分离-vue基础开发框架搭建
- VUE+SSM 以VUE做项目前端,SSM做后端框架,难点在于数据的传输处理,下面我记录一下一个简单的登录退出功能的实现,如果有缺陷还请大佬指出,个人菜鸟 一个,正在学习当中,以此记录一下自己的学习