Net Core 2.1 日志记录框架NLog+Mysql配置

NLog是什么?

这里还是简单介绍一下吧,为了让小白也知道。NLog是一个灵活的免费日志记录平台,适用于各种.NET平台,包括.NET Core。NLog可以通过简单地配置就可以可以很方便的写入多个日志仓库中(数据库,文件,控制台)。

NLog在Net Core中怎么用啊?

  1. 用之前你得新建一个asp.net core项目吧。这里以net core api为例吧。如下图所示是博主刚刚创建的net core api项目。

  1. 建好项目之后干什么呢、当然得添加引用了。你可以随心所欲的使用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
  2. 上面说了,NLog只需要简单地修改配置就可以使用,那接下来就是新建一个NLog配置文件了。你可以通过Nuget或者程序包控制台进行安装,也可以自己新建一个NLog.config文件。这里还是通过程序包控制台进行安装吧

    安装后看到项目目录多了一个NLog.config文件。这里需要注意,右键设置一下这个NLog.config的属性为“始终复制”

  3. 打开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>
     
  4. 上面的代码中我是以写入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();
            }
  5. 在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>();
        }
  6. 下面就可以在代码中愉快的玩耍了,
    [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" };
            }
    
        }
     
  7. 下面运行起来项目,然到数据库里面就可以看到记录的日志信息如下所示:

    这里大家可能会问,为什么没有Debug信息输出呢,这是因为我们上面NLog配置设置的记录日志的最低级别为Info.所以比Info级别小的Debug信息不会记录。如果想记录的话就把这个级别设置成Debug或者比Debug小的Trace就可以记录了。如下图所示:

原帖:https://blog.csdn.net/qq_42564846/article/details/81407097

原文地址:https://www.cnblogs.com/pingming/p/11159189.html

时间: 2024-08-30 03:41:21

Net Core 2.1 日志记录框架NLog+Mysql配置的相关文章

Net Core平台灵活简单的日志记录框架NLog初体验

Net Core平台灵活简单的日志记录框架NLog初体验 前几天分享的"[Net Core集成Exceptionless分布式日志功能以及全局异常过滤][https://www.cnblogs.com/yilezhu/p/9339017.html]" 有人说比较重量,生产环境部署也比较麻烦.因此就有了今天的这篇文章.如果你的项目(网站或者中小型项目)不是很大,日志量也不多的话可以考虑NLog+Mysql的组合.因为NLog具有高性能,易于使用,易于扩展和灵活配置的特点能够让你快速集成日

在android中配置 slf4j + log4j 日志记录框架

需求: 在项目开发中,需要记录 操作日志 .起初自己写了个简单的日志记录文本写入到文本的方法,后来随着项目的膨胀,需要考虑更多的操作,开始考虑性能问题. 实现: 考虑使用 slf4j + log4j 框架来实现.slf4j 是日志记录的一个facade,支持多种日志框架.log4j是个很优秀的日志记录框架. 实现: 下载类库: 先到各主站点下载类库 slf4j 网址 :http://www.slf4j.org/download.html log4j网址: http://logging.apach

asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程

原文:asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 最近在学习张善友老师的NanoFabric 框架的时了解到Exceptionless : https://exceptionless.com/ !因此学习了一下这个开源框架!下面对Exceptionless的学习做下笔记! Exceptionless是什么?能做什么呢? “Exceptionless”这个词的定义是:没有异常.Exceptionless可以为您的ASP.NET.We

也用 Log4Net 之将日志记录到数据库的配置 (一)

也用 Log4Net  之将日志记录到数据库的配置 (一) 前段时间我一直想做一个通用一点的日志记录系统,可以便于不同的业务组调用进行日志记录及分析.本来打算着自己下手写一个,后面发现各业务组可能会需要不同的记录方式,比如利用数据库来记录,用txt的文件形式来记录,当然,这些都是最常用的记录方式.而且不同的业务组都希望有自己的记录数据表,不希望和其他业务组的数据混在一起.于是我先前设想的架构方式也就付之一炬了,因为不够灵活,而且实现难度大.周期长.恰在此时想起了之前做项目的时候用的 Log4Ne

Log4Net 之将日志记录到数据库的配置 (一)

前段时间我一直想做一个通用一点的日志记录系统,可以便于不同的业务组调用进行日志记录及分析.本来打算着自己下手写一个,后面发现各业务组可能会需要不同的记录方式,比如利用数据库来记录,用txt的文件形式来记录,当然,这些都是最常用的记录方式.而且不同的业务组都希望有自己的记录数据表,不希望和其他业务组的数据混在一起.于是我先前设想的架构方式也就付之一炬了,因为不够灵活,而且实现难度大.周期长.恰在此时想起了之前做项目的时候用的 Log4Net 的开源日志框架,于是又从新Google了一下,发现,真棒

.NET日志记录框架Log4Net使用总结

做项目,记录日志是免不了的.在开发过程中还可以调试,但是在项目发布之后,不可能长期这么做,日志则能够在最快的时间内发现问题.最近,在好几个项目中使用了Log4net,感觉确实给我省了不少力,总结一下使用吧,同时也留作以后备用. 1 使用Nuget安装Log4Net: Install-Package log4net 2 创建LogHelper.cs using System; namespace UCsoft.Web.Common { /// <summary> /// Log4Net日志封装类

日志记录工具 log4net 的配置与使用

项目的日志组件是必备可少的,任何项目中都需要.这样既方便前期的开发测试也方便项目后期的项目维护.C#项目的一个不错的日志组件是log4net,下面我就把程序项目中log4net的如何配置粗略的记录一下. 第一步,给项目中安装log4net.打开项目,在"解决方案资源管理器"的项目目录中找到"引用"鼠标右键弹出菜单中点击"管理NuGet程序包(N)..."就会弹出一个管理窗口, 搜索到log4net点击安装. 第二步,在Web.config (或A

VS2012使用EF框架连接Mysql配置心路历

为了学习ORM,选择了EntityFramework,经历了三天两夜的煎熬,N多次错误,在群里高手的帮助下,终于成功,现在将我的心路历程记录下来,一是让自己有个记录,另外就是让其它人少走些弯路. 我的开发环境是Win7+VS2012,数据库环境是Ubuntu12.04+MySQL+Mono+Jexus 计划开发完后整个运行在Linux下. 1.下载MySQL Connector/Net 6.8.3 地址:http://dev.mysql.com/downloads/connector/net/

SLF4J - 一个允许你统一日志记录API的抽象层

一.什么是SLF4J 我们在做Java开发时,如果需要记录日志,有很多日志API可供选择,如: java.util.logging Apache log4j logback SLF4J又是个什么东东呢?为什么使用SLF4J比使用log4j或者java.util.logging更好呢?这是因为与所有提到的这些日志记录库相比,SLF4J没有真正地实现日志记录,相反它只是一个允许你使用任何处于后端的日志记录库的 抽象层 . 如果你正在编写内部或者外部使用的API或者应用库的话,那么你真的不需要让使用你