在之前的文章中介绍了如何在ASP.NET Core使用NLog,本文为您介绍在ASP.NET Core使用NLog记录到Microsoft Sql Server

我们需要添加依赖:

添加nlog.config文件

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. autoReload="true"
  5. internalLogLevel="Warn"
  6. internalLogFile="logfiles/internal-nlog.txt">
  7.  
  8. <!-- define various log targets -->
  9. <targets>
  10. <!-- write logs to file -->
  11. <target xsi:type="File" name="allfile" fileName="${var:configDir}\nlog-all.log"
  12. layout="${longdate}|${event-properties:item=EventId.Id}|${logger}|${uppercase:${level}}|${message} ${exception}" />
  13.  
  14. <target xsi:type="File" name="ownFile-web" fileName="${var:configDir}\nlog-own.log"
  15. layout="${longdate}|${event-properties:item=EventId.Id}|${logger}|${uppercase:${level}}| ${message} ${exception}" />
  16.  
  17. <target xsi:type="Null" name="blackhole" />
  18.  
  19. <target name="database" xsi:type="Database">
  20.  
  21. <connectionString>${var:connectionString}</connectionString>
  22.  
  23. <commandText>
  24. insert into dbo.Log (
  25. Application, Logged, Level, Message,
  26. Logger, Callsite, Exception
  27. ) values (
  28. @Application, @Logged, @Level, @Message,
  29. @Logger, @Callsite, @Exception
  30. );
  31. </commandText>
  32.  
  33. <parameter name="@application" layout="AspNetCoreNlog" />
  34. <parameter name="@logged" layout="${date}" />
  35. <parameter name="@level" layout="${level}" />
  36. <parameter name="@message" layout="${message}" />
  37.  
  38. <parameter name="@logger" layout="${logger}" />
  39. <parameter name="@callSite" layout="${callsite}" />
  40. <parameter name="@exception" layout="${exception:tostring}" />
  41. </target>
  42. </targets>
  43.  
  44. <rules>
  45. <!--All logs, including from Microsoft-->
  46. <logger name="*" minlevel="Trace" writeTo="allfile" />
  47.  
  48. <!--Skip Microsoft logs and so log only own logs-->
  49. <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
  50. <logger name="*" minlevel="Trace" writeTo="database" />
  51. <logger name="*" minlevel="Trace" writeTo="ownFile-web" />
  52. </rules>
  53. </nlog>

将nlog.config复制到输出目录

设置数据库(我使用的是ef code first方式创建数据表)

  1. using System;
  2.  
  3. namespace Apps.Models
  4. {
  5. public class ApplicationLog
  6. {
  7. public int Id { get; set; }
  8. public string Application { get; set; }
  9. public DateTime Logged { get; set; }
  10. public string Level { get; set; }
  11. public string Message { get; set; }
  12. public string Logger { get; set; }
  13. public string Callsite { get; set; }
  14. public string Exception { get; set; }
  15. }
  16. }
  1. protected override void OnModelCreating(ModelBuilder builder)
  2. {
  3. builder.Entity<ApplicationLog>(m =>
  4. {
  5. m.ToTable("Log");
  6. m.HasKey(c => c.Id);
  7. m.Property(c => c.Application).IsRequired().HasMaxLength();
  8. m.Property(c => c.Level).IsRequired().HasMaxLength();
  9. m.Property(c => c.Message).IsRequired();
  10. m.Property(c => c.Logger).HasMaxLength();
  11. });
  12. }

在startup.cs文件中添加:

  1. using NLog.Extensions.Logging;
  2. using NLog.Web;
  3.  
  4. public Startup(IHostingEnvironment env)
  5. {
  6. env.ConfigureNLog("nlog.config");
  7. }
  8.  
  9. // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
  10. public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
  11. {
  12.  
  13. loggerFactory.AddNLog();
  14.  
  15. app.AddNLogWeb();
  16. LogManager.Configuration.Variables["connectionString"] = Configuration.GetConnectionString("DefaultConnection");
  17. LogManager.Configuration.Variables["configDir"] = Configuration.GetSection("LogFilesDir").Value;
  18. }

appsettings.json

  1. "ConnectionStrings": {
  2. "DefaultConnection": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=logdb;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"
  3. },
  4. "LogFilesDir": "c:\\temp\\nlog\\logfiles"

然后就可以记录日志了

  1. public class HomeController :Controller {
  2. private readonly ILogger _logger;
  3.  
  4. public HomeController(ILoggerFactory loggerFactory) {
  5. _logger = loggerFactory.CreateLogger<HomeController>();
  6. }
  7. public IActionResult Index() {
  8. _logger.LogInformation("你访问了首页");
  9. _logger.LogWarning("警告信息");
  10. _logger.LogError("错误信息");
  11. return View();
  12. }
  13.   }

ASP.NET Core使用NLog记录日志到Microsoft Sql Server的更多相关文章

  1. asp.net core 使用NLog记录日志到txt文件

    一.使用VisualStudioCode创建一个webapi项目(也可以是mvc等).一个类库(用于封装记录日志方法,当然如果使用依赖注入到控制台项目,就不需要此类库了). 二.在类库中添加NLog. ...

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

    1.根目录新建nlog.config配置文件 <?xml version="1.0"?> <nlog xmlns="http://www.nlog-pr ...

  3. ASP .Net Core 在 CentOS8 ARM 下连接 SQL Server 2008 R2(Hypervisor)

    本文主要记录在 ARM 系统下无法连接SQL Server 2008 R2 的解决过程. 解决方案是使用 ODBC 的方式连接数据库,进行操作. 手上有公司的华为鲲鹏云计算 ARM 架构的 CentO ...

  4. asp.net core结合NLog搭建ELK实时日志分析平台

    0.整体架构 整体架构目录:ASP.NET Core分布式项目实战-目录 一.介绍ELK 1.说明(此篇ELK采用rpm的方式安装在服务器上)-牛刀小试 承接上一篇文章的内容准备部署ELK来展示asp ...

  5. [.Net Core] - 使用 NLog 记录日志到 Sql Server

    1. 使用 Nuget 安装 NLog. 2. 在 Sql Server 中创建 NLog 数据表. CREATE TABLE [dbo].[NLogInfo]( ,) NOT NULL, [Date ...

  6. Cenots7下安装运行.NET Core、MicroSoft SQL Server 2019 preview 的基础实践

    一:概要 适应人群:.Net初学者.想了解.Net Core在Linux系统中的运行环境搭建者.初次且想在linux上应用.Net Core开发应用程序者: 基础技能:了解.NET基础开发技能者.有一 ...

  7. asp.net编译中出现 数据库 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\test1.mdf' 已存在。请选择其他数据库名称。

    关于asp.net编译中出现数据库 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\test1.mdf ...

  8. Microsoft SQL Server Compact 4.0&&ADO.NET Entity Framework 4.1&&MVC3

    最近重新查看微软MvcMusicStore-v3.0的源代码,发现忽略了很多重要的东西,特别是数据访问那一部分. 首先Microsoft SQL Server Compact 4.0 详细的介绍和下载 ...

  9. 使用 Oracle GoldenGate 在 Microsoft SQL Server 和 Oracle Database 之间复制事务

    使用 Oracle GoldenGate 在 Microsoft SQL Server 和 Oracle Database 之间复制事务 作者:Nikolay Manchev 分步构建一个跨这些平台的 ...

随机推荐

  1. Win10和Ubuntu双系统搭建详

    最近学习云计算时,需要搭建xen和Hadoop,虚拟机容易出很多问题所以搭建了双系统,也方便以后的学习. 下面是详细搭建过程: 准备材料: U盘(容量>8G,最好是3.0接口速度快).Ultra ...

  2. linux 怎么与网络对时

    首先来了解下面几个知识点:1. date命令:#date显示系统时间2.hwclock命令 (即hardwareclock系统硬件时间)#hwclock显示硬件时间#hwclock -w将系统时间写入 ...

  3. 网络通信中tcp多客户端连接

    网络编程中的tcp实例太多了,自己也写了好几次(羞愧),今天在想一对一的TCP知道怎么写了,可是一对多的怎么办呢?服务器是如何知道要给那个发送数据呢?做开发的同学应该经常听说uid这个属性.可以为什么 ...

  4. swagger支持中英文

    内存中使用一种数据结构存储着大量的信息,其中原始的描述信息(各种属性的描述,种类很多),中英文都包含,格式为:"english//中文".需求:描述description需要动态变 ...

  5. 艾奇学院:66个信息流广告和SEM学习网址资源大放送!

    01.CNZZ-UDplus 网址:udplus.umeng.com 说明:基于用户行为的精细化分析.运营平台,去研究研究,很多料! 02.黑眼圈管理后台 网址:www.not3.com 说明:二类电 ...

  6. 71.纯 CSS 创作一个跳 8 字型舞的 loader

    原文地址:https://segmentfault.com/a/1190000015534639#articleHeader0 感想:rotateX() 和rotateZ()一起使用好懵呀. HTML ...

  7. js自执行事件

    let a = document.createElement("a");let event = new MouseEvent("click");a.downlo ...

  8. Mybatis pageHelper.startPage(...)是物理分页

    使用PageHelper.startPage(...)进行物理分页 业务需求只显示其中的100条数据 之前是在业务逻辑里对参数limit进行了处理 后来试试sql的limit查询100条数据 但是不确 ...

  9. 1024程序员节宅男节日快乐 -- JAVA快速开发平台,JEECG 3.8宅男优化版本发布

    JEECG 3.8 版本发布,系统全面升级,重构上传组件.优化代码生成器机制! 导读   ⊙平台性能优化,系统更稳定,速度闪电般提升 ⊙系统上传组件全面重构,使用plupload组件,解决flash的 ...

  10. Day07 - Ruby比一比:Symbol符号与String字串

    前情提要: 第六天我们透过Ruby代码练习public,protected和privatemethod时,发现冒号在前面的参数,:mydraft,:myspace,这些就是符号Symbol.在今天,我 ...