Net Core 2.1 日志记录框架NLog+Mysql配置
2019-07-09 18:20
1786 查看
NLog是什么?
这里还是简单介绍一下吧,为了让小白也知道。NLog是一个灵活的免费日志记录平台,适用于各种.NET平台,包括.NET Core。NLog可以通过简单地配置就可以可以很方便的写入多个日志仓库中(数据库,文件,控制台)。
NLog在Net Core中怎么用啊?
- 用之前你得新建一个asp.net core项目吧。这里以net core api为例吧。如下图所示是博主刚刚创建的net core api项目。
-
建好项目之后干什么呢、当然得添加引用了。你可以随心所欲的使用Nuget或者命令进行安装
Install-Package NLog -Version 4.6.5 Install-Package NLog.Web.AspNetCore -Version 4.8.4
Install-Package MySql.Data -Version 8.0.16
-
上面说了,NLog只需要简单地修改配置就可以使用,那接下来就是新建一个NLog配置文件了。你可以通过Nuget或者程序包控制台进行安装,也可以自己新建一个NLog.config文件。这里还是通过程序包控制台进行安装吧
安装后看到项目目录多了一个NLog.config文件。这里需要注意,右键设置一下这个NLog.config的属性为“始终复制”
-
打开nlog.config文件,看看里面的结构,发现有两个重要节点,一个是声明目标 一个是声明规则。如下图所示,我配置了一个写入文件,一个写入mysql的target.并定义了不同的写入规则,大家可以根据实际需要参照着自定义规则以及target.
<?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" throwExceptions="true" internalLogLevel="Off" internalLogFile="nlog.txt"> <targets> <target name="file" xsi:type="File" layout="${longdate} ${logger} ${message}${exception:format=ToString}" fileName="${basedir}/logs/nlog.txt" keepFileOpen="true" encoding="utf-8" /> <target xsi:type="Null" name="blackhole" /> <target name="database" xsi:type="Database" dbProvider="MySql.Data.MySqlClient.MySqlConnection, MySql.Data" connectionString="server=127.0.0.1;Database=数据库名;user id=root;password=111111;SslMode=none" > <!-- CREATE TABLE `log` ( `Id` int(10) unsigned NOT NULL AUTO_INCREMENT, `Application` varchar(50) DEFAULT NULL, `Logged` datetime DEFAULT NULL, `Level` varchar(50) DEFAULT NULL, `Message` varchar(512) DEFAULT NULL, `Logger` varchar(250) DEFAULT NULL, `Callsite` varchar(512) DEFAULT NULL, `Exception` varchar(512) DEFAULT NULL, `Title` varchar(512) DEFAULT NULL, PRIMARY KEY (`Id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; --> <commandText> insert into logs ( Application, Logged, Level, Message, Logger, CallSite, Exception,Title ) values ( @Application, @Logged, @Level, @Message, @Logger, @Callsite, @Exception,@title ); </commandText> <parameter name="@application" layout="NLogTestDemo" /> <parameter name="@logged" layout="${date}" /> <parameter name="@level" layout="${level}" /> <parameter name="@message" layout="${message}" /> <parameter name="@logger" layout="${logger}" /> <parameter name="@callSite" layout="${callsite:filename=true}" /> <parameter name="@exception" layout="${exception:tostring}" /> <parameter name="@title" layout="${event-context:item=title}" /><!--自定义字段--> </target> </targets> <rules> <logger name="*" minlevel="Debug" writeTo="file" /> <!--Skip Microsoft logs and so log only own logs--> <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" /> <logger name="*" minlevel="Debug" writeTo="database" /> </rules> </nlog>
-
上面的代码中我是以写入mysql为例进行的NLog配置。下面就可以进行简单地使用了。首先需要在。首先在Startup中的Configure中来加入中间件:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } //使用NLog作为日志记录工具 loggerFactory.AddNLog(); //引入Nlog配置文件 env.ConfigureNLog("nlog.config"); //app.AddNLogWeb(); app.UseMvc(); }
-
在Program中进行如下配置:
public class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseNLog() .UseStartup<Startup>(); }
-
下面就可以在代码中愉快的玩耍了,
[Route("api/[controller]")] [ApiController] public class ValuesController : ControllerBase { private readonly Logger nlog = LogManager.GetCurrentClassLogger(); //获得日志实; // GET api/values [HttpGet] public ActionResult<IEnumerable<string>> Get() { //1、没有加自定义字段测试 //nlog.Log(LogLevel.Debug, $"测试Debug日志"); //nlog.Log(LogLevel.Info, $"测试Info日志"); //try //{ // throw new Exception($"故意抛出的异常"); //} //catch (Exception ex) //{ // nlog.Log(LogLevel.Error, ex, $"异常的额外信息"); //} //2、添加自定义字段测试 //LogEventInfo log = new LogEventInfo(); //log.Properties["title"] = "测试吧"; //log.Level = LogLevel.Debug; //log.Message = "测试Debug"; //nlog.Log(log); return new string[] { "value1", "value2" }; } }
-
下面运行起来项目,然到数据库里面就可以看到记录的日志信息如下所示:
这里大家可能会问,为什么没有Debug信息输出呢,这是因为我们上面NLog配置设置的记录日志的最低级别为Info.所以比Info级别小的Debug信息不会记录。如果想记录的话就把这个级别设置成Debug或者比Debug小的Trace就可以记录了。如下图所示:
原帖:https://blog.csdn.net/qq_42564846/article/details/81407097
相关文章推荐
- C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志
- Andriod Studio 配置slf4j日志记录框架
- 日志框架Nlog之异步记录
- Django-drf 框架的mysql和redis及日志的配置
- .net core使用NLog+Elasticsearch记录日志
- 基于Spring AOP和Groovy日志模板配置的日志记录框架的二次实现与使用案例
- mysql 记录查询日志的参数配置
- syslog_ng的安装与配置及日志记录至mysql
- Net Core平台灵活简单的日志记录框架NLog+Mysql组合初体验
- 在android中配置 slf4j + log4j 日志记录框架
- Net Core平台灵活简单的日志记录框架NLog+SqlServer初体验
- Net Core平台灵活简单的日志记录框架NLog+SqlServer初体验
- Java日志记录框架Logback配置详解(企业级应用解决方案)
- 从壹开始前后端分离【 .NET Core2.0 Api + Vue 2.0 + AOP + 分布式】框架之十 || AOP面向切面编程浅解析:简单日志记录 + 服务切面缓存
- 日志框架Nlog之前言
- 使用log4net记录日志到MySQL中 (转)
- 配置Linux的Syslog服务来记录Cisco路由器的日志(基本配置) .
- 在ASP.NET MVC 3中使用日志记录组件Elmah和NLog
- Mysql 如何记录执行慢的语句日志
- Spring使用AOP记录日志(javaconfig配置)