.Net Core 使用NLog记录日志到文件和数据库的操作方法

NLog 记录日志是微软官方推荐使用。

接下来,通过配置日志记录到文件和Sql Server数据库。

第一步:首先添加包NLog.Config (可通过微软添加包命令Install-Package 包名进行添加,也可以通过管理NuGet程序包进行添加),添加成功后会生成NLog.config配置文件。并对该配置文件进行配置。详细配置可参考Git上 NLog说明。

一下是我个人配置。

 <?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="Warn"
        internalLogFile="Logs/nlog-internal.log">

   <!--internalLogLevel="Off"-->
   <!-- optional, add some variables
   https://github.com/nlog/NLog/wiki/Configuration-file#variables
   -->
   <variable name="myvar" value="myvalue"/>

   <!--
   See https://github.com/nlog/nlog/wiki/Configuration-file
   for information on customizing logging rules and outputs.
    -->
   <targets>

     <!--
     add your targets here
     See https://github.com/nlog/NLog/wiki/Targets for possible targets.
     See https://github.com/nlog/NLog/wiki/Layout-Renderers for the possible layout renderers.
     -->

     <!--
     Write events to a file with the date in the filename.
     <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
             layout="${longdate} ${uppercase:${level}} ${message}" />
     -->

     <!-- write logs to file -->
     <target xsi:type="File" name="allfile" fileName="Logs/${date:format=yyyyMM}/nlog-all-${shortdate}.log"
              layout="${longdate}|${event-properties:item=EventId.Id}|${uppercase:${level}}|${logger} ${newline}${message} ${exception} ${newline}" />

     <target xsi:type="File" name="ownFile-web" fileName="Logs/${date:format=yyyyMM}/nlog-own-${shortdate}.log"
              layout="${longdate}|${event-properties:item=EventId.Id}|${uppercase:${level}}|${logger} ${newline}${message} ${exception} ${newline} --- |url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />

     <target xsi:type="Null" name="blackhole" />

     <target xsi:type="Database" name="database">
       <connectionString>${var:connectionString}</connectionString>
       <commandText>
         insert into syslogs (Application,Levels,Operatingtime,Operatingaddress,Userid,Logger,Callsite,Requesturl,Referrerurl,Action,Message,Exception)
         values (@application,@levels,@operatingtime,@operatingaddress,@userid,@logger,@callSite,@requesturl,@referrerurl,@action,@message,@exception);
       </commandText>
       <parameter name="@application" layout="WebApi" />
       <parameter name="@levels" layout="${level}" />
       <parameter name="@operatingTime" layout="${date}" />
       <parameter name="@operatingaddress" layout="${aspnet-Request-IP}" />
       <parameter name="@userid" layout="1" />
       <parameter name="@logger" layout="${logger}" />
       <parameter name="@callSite" layout="${callsite}" />
       <parameter name="@requesturl" layout="${aspnet-request-url}" />
       <parameter name="@referrerurl" layout="${aspnet-request}" />
       <parameter name="@action" layout="${aspnet-mvc-action}" />
       <parameter name="@message" layout="${message}" />
       <parameter name="@exception" layout="${exception:tostring}" />
     </target>

   </targets>

   <rules>
     <!-- add your logging rules here -->

     <!--
     Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace)  to "f"
     <logger name="*" minlevel="Debug" writeTo="f" />
     -->

     <!--All logs, including from Microsoft-->
     <!--minlevel 改为Trace 跟踪全部 Error 只捕获异常-->
     <logger name="*" minlevel="Error" writeTo="allfile" />

     <!--Skip Microsoft logs and so log only own logs-->
     <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
     <logger name="*" minlevel="Trace" writeTo="ownFile-web" />
     <logger name="*" minlevel="Trace" writeTo="database" />    

   </rules>
 </nlog>

 <!--增加引用
 <PackageReference Include="NLog.Extensions.Logging" Version="1.2.1" />
 <PackageReference Include="NLog.Web.AspNetCore" Version="4.6.0" />-->

说明:targets 中有一节点为Database,是配置将日志写入数据库中,注意需要在数据库中添加该记录日志表。

{
  "ConnectionStrings": {
    "DefaultConnection": "Data Source=192.168.30.133;Initial Catalog=Test;User ID=sa;Password=123456;Trusted_Connection=True;MultipleActiveResultSets=true;Integrated Security=false;"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*"
}

第二步:添加包NLog.Web.AspNetCore,在Program.cs中的WebHost加入".UseNLog()"(该属于程序集NLog.Web,需要添加引用using NLog.Web;),即为添加nlog.

using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using NLog.Web;

namespace WebApi
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .UseNLog(); //加入nlog日志
    }
}

第三步:在Startup.cs中的Configure方法中添加记日志代码,即需要加载的配置文件和配置日志写入数据库连接字符串代码。注意:为避免中文乱码问题需要添加System.Text.Encoding.CodePages包。

  public void Configure(IApplicationBuilder app, IHostingEnvironment env)
          {

              #region Nlog记日志
              //将日志记录到数据库                 config/NLog.config
              NLog.LogManager.LoadConfiguration("nlog.config").GetCurrentClassLogger();       NLog.LogManager.Configuration.Variables["connectionString"] = Configuration.GetConnectionString("DefaultConnection");   Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);  //避免日志中的中文输出乱码
              #endregion

             if (env.IsDevelopment())
                 app.UseDeveloperExceptionPage();
             else
                 app.UseHsts();
   app.UseHttpsRedirection();

             app.UseMvc();
         }

第四步:使用微软推荐的方式在在构造方法中将将日志对象注入。

public class UsersController : Controller
    {
        /// <summary>
        /// 日志对象
        /// </summary>
        private readonly ILogger logger;
         public UsersController(ILoggerFactory loggerFactory)
        {
            this.logger = loggerFactory.CreateLogger<UsersController>();

            #region 测试日志
            logger.LogTrace("开发阶段调试,可能包含敏感程序数据", 1);
            logger.LogDebug("开发阶段短期内比较有用,对调试有益。");
            logger.LogInformation("你访问了首页。跟踪程序的一般流程。");
            logger.LogWarning("警告信息!因程序出现故障或其他不会导致程序停止的流程异常或意外事件。");
            logger.LogError("错误信息。因某些故障停止工作");
            logger.LogCritical("程序或系统崩溃、遇到灾难性故障!!!");
            #endregion
        }

所有工作完成,运行程序。在配置NLog路径下生成日志文件,同时,在数据库中生成日志。

到此这篇关于.Net Core 使用NLog记录日志到文件和数据库的文章就介绍到这了,更多相关.Net Core记录日志到文件和数据库内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解.Net core2.0日志组件Log4net、Nlog简单性能测试

    .Net core之Log4net.Nlog简单性能测试 比较log4net.nlog的文件写入性能(.netcore环境),涉及代码和配置如有不正确的地方,还请批评指正. 测试环境 开发工具: Vsual Studio 2017 15.3 框架版本: .net core 2.0 操作系统:window10 Enterprise 1703 硬件配置:CPU I3-4170 3.7GHz,内存 8G,固态硬盘 日志组件 log4net 2.0.8 nlog 5.0.0-beta10 测试用例 1.

  • 关于.Net 6 添加NLog的方法

    创建一个.Net 6 Demo项目 引入NLog包 添加项目配置文件nlog.config <?xml version="1.0" encoding="utf-8"?> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xsi:schemaLocation="NLog NLog.xsd" xmlns:xsi="http://www.

  • .Net Core项目中NLog整合Exceptionless实例

    目录 前言 概念 Exceptionless NLog 环境搭建 Exceptionless搭建 集成NLog 简单测试一下 总结 前言 在实际的.Net Core相关项目开发中,很多人都会把NLog作为日志框架的首选,主要是源于它的强大和它的扩展性.同时很多时候我们需要集中式的采集日志,这时候仅仅使用NLog是不够的,NLog主要是负责代码中日志的落地,也就是收集程序中的日志.类似的使用ELK(Elasticsearch+Logstash+Kibana)或EFK(Elasticsearch+F

  • Asp.Net Core用NLog记录日志操作方法

    需求 1.日志自动写入到数据库.写入到文件 2.appsettings.json数据库连接更改后,不需要去改NLog中的连接地址,启动网站或项目时自动检测变动然后去更改,以appsettings.json为准,保持同步. 3.写入日志时,除了NLog自带的字段,新增LogType自定义字段记录日志类型,例如网站日志.中间件日志等 4.统一的写日志方法,不用每次get一个logger对象(或依赖注入)来记日志 安装包 在nuget中安装NLog和NLog.Web.AspNetCore ,这两个是N

  • 使用NLog给Asp.Net Core做请求监控的方法

    为了减少由于单个请求挂掉而拖垮整站的情况发生,给所有请求做统计是一个不错的解决方法,通过观察哪些请求的耗时比较长,我们就可以找到对应的接口.代码.数据表,做有针对性的优化可以提高效率.在 asp.net web api 中我们可以通过注册一个 DelegatingHandler 来实现该功能.那在 asp.net core 中该如何实现呢? 一:比较 asp.net web api 和 asp.net core 的请求管道 观察这两张图,可以发现他们非常的相似,都是管道式的设计,在 asp.ne

  • ASP.NET Core与NLog集成的完整步骤

    前言 一直很喜欢 NLog 的简洁和扩展性,所以准备将 ASP.NET Core 提供的默认日志提供程序替换成 NLog. NLog 是一个跨平台的 .Net 日志组件. NLog 遵从 BSD license,即允许商业应用且完全开放源代码.任何人都可以免费使用并对其进行测试,然后通过邮件列表反馈问题以及建议. 下面话不多说了,来一起看看详细的介绍吧. 步骤 1 在项目的project.json中添加依赖NLog.Extensions.Logging: "dependencies":

  • .Net项目中NLog的配置和使用实例详解

    引言: 因为之前在项目开发中一直都是使用的Log4Net作为项目的日志记录框架,最近忽然感觉对它已经有点腻了,所以尝试着使用了NLog作为新项目的日志记录框架(当然作为一名有志向的攻城狮永远都不能只局限于眼前的技术,要不断的使用和学习新的技术).当然serilog也是一个不错的日志记录框架哟,不过今天主要还是要讲述的是NLog在项目中的配置和使用. NLog框架源码:https://github.com/NLog/NLog 一.导入NLog NuGet PackAge: 二.配置NLog 配置文

  • ASP.NET Core开发教程之Logging利用NLog写日志文件

    前言 本文主要介绍了ASP.NET Core 开发-Logging 使用NLog 写日志文件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 NLog 可以适用于 .NET Core 和 ASP.NET Core . ASP.NET Core已经内置了日志支持,可以轻松输出到控制台. 学习Logging 组件的相关使用,使用NLog 将日志写入到文件记录. Logging 使用 新建一个 ASP.NET Core 项目,为了方便,我选择Web 应用程序,改身份验证 改为

  • .NET日志框架Nlog使用介绍

    目录 快速安装 快速配置 快速使用 详解配置 添加支持Console输出 输出至CSV文件 配置日志大小 配置日志分级 配置生成规则 日志过滤器 条件语言 条件函数 NLog是一个基于.NET平台编写的类库,我们可以使用NLog在应用程序中添加极为完善的跟踪调试代码. NLog是一个简单灵活的.NET日志记录类库.通过使用NLog,我们可以在任何一种.NET语言中输出带有上下文的(contextual information)调试诊断信息,根据喜好配置其表现样式之后发送到一个或多个输出目标(ta

  • .Net Core 使用NLog记录日志到文件和数据库的操作方法

    NLog 记录日志是微软官方推荐使用. 接下来,通过配置日志记录到文件和Sql Server数据库. 第一步:首先添加包NLog.Config (可通过微软添加包命令Install-Package 包名进行添加,也可以通过管理NuGet程序包进行添加),添加成功后会生成NLog.config配置文件.并对该配置文件进行配置.详细配置可参考Git上 NLog说明. 一下是我个人配置. <?xml version="1.0" encoding="utf-8" ?&

  • ASP.NET Core使用NLog记录日志

    目录 一.前言 二.使用NLog 1.引入NLog 2.添加配置文件 3.在控制器中使用 4.读取指定位置的配置文件 5.封装 一.前言 在所有的应用程序中,日志功能是不可或缺的模块,我们可以根据日志信息进行调试.查看产生的错误信息,在ASP.NET Core中我们可以使用log4net或者NLog日志组件来实现记录日志的功能,这里讲解如何在ASP.NET Core中使用NLog. 这里采用的是.NET Core 3.1创建应用程序. 那么什么是NLog呢? NLog是一个基于.NET平台编写的

  • ASP.NET Core使用NLog输出日志记录

    ASP.NET Core 中的日志记录 https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/logging/?view=aspnetcore-2.1 日志级别:Trace ->Debug-> Information ->Warning-> Error-> Critical 级别包含范围由大到小 ,如 Trace 就包含了所有信息. 基础用法 public class HomeController : Contro

  • 解析如何利用一个ASP.NET Core应用来发布静态文件

    虽然ASP.NET Core是一款"动态"的Web服务端框架,但是在很多情况下都需要处理针对静态文件的请求,最为常见的就是这对JavaScript脚本文件.CSS样式文件和图片文件的请求.针对不同格式的静态文件请求的处理,ASP.NET Core为我们提供了三个中间件,它们将是本系列文章论述的重点.不过在针对对它们展开介绍之前,我们照理通过一些简单的实例来体验一下如何在一个ASP.NET Core应用中发布静态文件. 目录 一.以Web的形式读取文件 二.浏览目录内容 三.显示默认页面

  • ASP.NET Core 导入导出Excel xlsx 文件实例

    ASP.NET Core 使用EPPlus.Core导入导出Excel xlsx 文件,EPPlus.Core支持Excel 2007/2010 xlsx文件导入导出,可以运行在Windows, Linux和Mac. EPPlus.Core 是基于EPPlus 更改而来,在Linux 下需要安装libgdiplus . EPPlus:http://epplus.codeplex.com/ EPPlus.Core:https://github.com/VahidN/EPPlus.Core 下面在A

  • ASP.NET Core中预压缩静态文件的方法步骤

    前言 Web应用程序的优化是非常重要,因为使用更少的CPU,占用更少的带宽可以减少项目的费用. 在ASP.NET Core中我们可以很容易的启用响应压缩,但是针对预压缩文件,就需要做一些额外的功能了. 这篇博客文章展示了如何在ASP.NET Core中预压缩静态文件. 下面话不多说了,来一起看看详细的介绍吧 为什么需要预压缩文件? 虽然在从服务器请求文件时, 我们可以动态压缩文件,但这意味这Web服务器需要做更多的额外工作. 其实只有在新的应用程序部署时才会更改要压缩的文件. 越好的压缩效果需要

  • 聊聊.Net,Core配置Nlog.md的问题

    首先在你的项目中用Nuget安装以下两个类库NLog.Extensions.Logging和NLog.Web.AspNetCore然后新建NLog的配置文件Nlog.config,内容如下 : 然后在Startup>Configure中引入Nlog public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { LogManager.LoadConfig

  • .Net Core导入千万级数据至Mysql数据库的实现方法

    ​最近在工作中,涉及到一个数据迁移功能,从一个txt文本文件导入到MySQL功能. 数据迁移,在互联网企业可以说经常碰到,而且涉及到千万级.亿级的数据量是很常见的.大数据量迁移,这里面就涉及到一个问题:高性能的插入数据. 今天我们就来谈谈MySQL怎么高性能插入千万级的数据. 我们一起对比以下几种实现方法: 前期准备 订单测试表 CREATE TABLE `trade` ( `id` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',

随机推荐