在这之前打算用Apache的Log4Net,但是发现其AdoNetAppender方法已经不存在了,无法使用配置文件直接输出到数据库了,因此我便改用了NLog框架。

一、对项目添加NLog

通过Nuget安装NLog NLog.Extensions.Logging、NLog.Web.AspNetCore
 
 

二、对NLog.config进行配置

     项目中添加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"
       autoReload="true"
       internalLogLevel="Trace"
       internalLogFile="internal-nlog.txt">
  <!-- define various log targets -->
   <targets>
    <!-- write logs to file -->
     <target xsi:type="File" name="allfile" fileName="${var:configDir}\nlog-all.log"
             layout="${longdate}|${event-properties:item=EventId.Id}|${logger}|${uppercase:${level}}|${message} ${exception}"/>     <target xsi:type="File" name="ownFile-web" fileName="${var:configDir}\nlog-own.log"
             layout="${longdate}|${event-properties:item=EventId.Id}|${logger}|${uppercase:${level}}|  ${message} ${exception} " />
    <target xsi:type="Null" name="blackhole" />
   <target name="database" xsi:type="Database">
       <connectionString>${var:connectionString}</connectionString>
       <commandText>
         INSERT INTO [dbo].[System_SqlLog]
         ([SqlLogId]
         ,[CreateUserId]
         ,[CreateUserCode]
         ,[CreateUserName]
         ,[CreateTime]
         ,[OperateSql]
         ,[EndDateTime]
         ,[ElapsedTime]
         ,[Parameter])
         VALUES
         (@SqlLogId
         ,@CreateUserId
         ,@CreateUserCode
         ,@CreateUserName
         ,@CreateTime
         ,@OperateSql
         ,@EndDateTime
         ,@ElapsedTime
         ,@Parameter);
       </commandText>
       <parameter name="@SqlLogId" layout="${event-context:item=SqlLogId}"/>
       <parameter name="@CreateUserId" layout="${event-context:item=CreateUserId}" />
       <parameter name="@CreateUserCode" layout="${event-context:item=CreateUserCode}"/>
       <parameter name="@CreateUserName" layout="${event-context:item=CreateUserName}"/>
       <parameter name="@CreateTime" layout="${event-context:item=CreateTime}"/>
       <parameter name="@OperateSql" layout="${event-context:item=OperateSql}" />
       <parameter name="@EndDateTime" layout="${event-context:item=EndDateTime}" />
       <parameter name="@ElapsedTime" layout="${event-context:item=ElapsedTime}" />
       <parameter name="@Parameter" layout="${event-context:item=Parameter}" />
     </target>
  </targets>
   <rules>
    <!--All logs, including from Microsoft-->
     <logger name="*" minlevel="Trace" writeTo="allfile" />
    <!--Skip Microsoft logs and so log only own logs-->
    <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
     <logger name="SqlLogToDatabase" minlevel="Debug" writeTo="database" />
    <logger name="*" minlevel="Trace" writeTo="ownFile-web" />
   </rules> </nlog>
  • Nlog节点如果设置 InternalLogLevel,internalLogFile 可以查看NLog输出日志时的内部信息,并且可以再里面检查配置文件错误等。
  • database target内可以指定connectionString,Sql语句,Sql参数等

三、添加NLog到 .Net Core中

  
 
 

四、执行

  

public virtual void WriteLog() {
            Logger iLog = LogManager.GetCurrentClassLogger();
            if (iLog.IsInfoEnabled) {
                LogEventInfo ei = new LogEventInfo(NLog.LogLevel.Info, "", "");
                ei.Properties["SqlLogId"] = CombUtil.NewComb();
                iLog.Info(ei);
            }
        }
     这样便可以将定义的值添加到数据库中。

五、LayoutRenderer的应用

     根据上面的操作并满足不了我当前框架的应用,我所需要的是直接传对象,但是直接iLog.Info(T);并不会获取到值,他会获取到空值。
在这里操作的话就得需要自定义LayoutRenderer。
    这个我们可以看出他是一个泛型方法,所以往里面插入对象是可行的。下面我说一下怎么重写LayoutRenderer。直接上代码
 
Append会返回一个数据给当前调用者。然后我们再修改一下配置文件NLog.config。
并且我们还需要加载此程序集
这样就会将对应的值插入到我们的数据库中了。
  1. <targets/>定义日志的目标/输出
    1. type - 目标的类型 - 比如“File”,“Database”,“Mail”。如果你使用了名字空间,这个属性会被命名为 xsi:type.
  2. <rules /> - 定义日志的路由规则
  3. <extensions /> - 从*.dll加载NLog扩展
  4. <include /> - 导入外部配置文件
  5. <variable /> - 为配置变量赋值
 交流群:743523033

Asp.Net Core NLog 将日志输出到数据库以及添加LayoutRenderer的支持的更多相关文章

  1. asp.net core NLog将日志写到文件

    1.安装Nlog包 Install-Package NLog.Extensions.Logging -Pre 2.在项目添加nlog.config文件 2.1.nlog.config <?xml ...

  2. .NET Core+NLog+存储配置 日志存入到数据库

    nlog-config.xml 配置文件: <?xml version="1.0" encoding="utf-8" ?> <nlog xml ...

  3. ASP.NET Core 2.1 : 十二.内置日志、使用Nlog将日志输出到文件

    应用离不开日志,虽然现在使用VS有强大的调试功能,开发过程中不复杂的情况懒得输出日志了(想起print和echo的有木有),但在一些复杂的过程中以及应用日常运行中的日志还是非常有用. ASP.NET ...

  4. 第七节:Asp.Net Core内置日志和整合NLog(未完)

    一. Asp.Net Core内置日志 1. 默认支持三种输出方式:控制台.调试(底部输出窗口).EventSource,当然也可以在Program类中通过logging.ClearProviders ...

  5. 玩转ASP.NET Core中的日志组件

    简介 日志组件,作为程序员使用频率最高的组件,给程序员开发调试程序提供了必要的信息.ASP.NET Core中内置了一个通用日志接口ILogger,并实现了多种内置的日志提供器,例如 Console ...

  6. asp.net core 系列 13 日志

    一.概述 ASP.NET Core 支持适用于各种内置和第三方日志记录, 供程序的日志记录 API,本文介绍了如何将日志记录 API 与内置提供程序一起使用.对于第三方日志记录提供程序使用,文章最后有 ...

  7. ASP.NET Core 中的日志记录

    目录 内置日志的使用 使用Nlog 集成ELK 参考 内置日志的使用 Logger 是 asp .net core 的内置 service,所以我们就不需要在ConfigureService里面注册了 ...

  8. (14)ASP.NET Core 中的日志记录

    1.前言 ASP.NET Core支持适用于各种内置和第三方日志记录提供应用程序的日志记录API.本文介绍了如何将日志记录API与内置提供应用程序一起使用. 2.添加日志提供程序 日志记录提供应用程序 ...

  9. ASP.NET Core 异常处理与日志记录

    1. ASP.NET Core 异常处理与日志记录 1.1. 异常处理 1.1.1. 异常产生的原因及处理 1.1.2. ASP.NET Core中启动开发人员异常页面 1.2. 日志记录 1.2.1 ...

随机推荐

  1. How to download the installation package by ZOL Downer

    How to download the installation package by ZOL Downer Ma Genfeng (Guangdong Unitoll Services incorp ...

  2. MCU实战经验:多种的按键处理

    按键通常有:IO口按键(BUTTON),AD按键(通过AD采样电压),IR(遥控器) 按按键功能分:有短按键,长按键,连续按键.打个比方,遥控电视机,按一下音量键,音量增加1,这个就是短按键.按住音量 ...

  3. 设置UIButton中的文字和图片,设置UILabel的文在显示不同颜色

    UIButton: UIEdgeInsets 在UIButton中有三个对EdgeInsets的设置:ContentEdgeInsets.titleEdgeInsets.imageEdgeInsets ...

  4. nasm中的表达式

    nasm表达式支持2个特殊的记号 $和$$;前者标识其所在源码行的开始处地址,所以你可以这样写死循环: jmp $ 而后者标识当前段开始处的地址,你可以通过: $-$$ 找出当前代码在段内的偏移. n ...

  5. 快速熟悉Oracle索引

    一.索引 1.1 什么是索引? 一种用于提升查询效率的数据库对象: 通过快速定位数据的方法,减少磁盘的输入输出操作: 索引信息与表独立存放: Oracle数据库自动使用和维护索引. 1.2 索引分类 ...

  6. SAP BADI的“多次使用”(multiple use)

    SAP中的某些BADI是不允许多用(multiple use)的,即不能同时存在多个活动的增强实施类.如下图中的这种,无论为其创建多少个实施类,都只有活动的那一个会被触发: tips : 业务加载项定 ...

  7. 深入了解Map

    联系 Java中的Map类似于OC的Dictionary,都是一个个键值对组成,一键对应一值.我在之前的文章中讲解过Set,其实在JAVA底层Set依赖的也是Map,那我们都知道,Set是单列的(只有 ...

  8. JSON 的含义?

    JSON 的全称是 JavaScript Object Notation,是一种轻量级的数据交换格式.JS ON 与 XML 具有相同的特性,例如易于人编写和阅读,易于机器生成和解析.但是 JSON ...

  9. Web安全学习计划

    http://cisps.org/bbs/viewtopic.php?f=71&t=26125 标题为Web安全学习计划,实属我的愿望:将下面这份Web学习清单完善成为一个Web安全,学习计划 ...

  10. ubuntu导入公钥的方法

    导入公钥的办法: #方法1: gpg --keyserver subkeys.pgp.NET --recv 6E871C4A881574DEgpg --export --armor 6E871C4A8 ...