在这之前打算用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. 基于opencv的gpu与cpu对比程序,代码来自opencv的文档中

    原文链接: http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/gpu/gpu-basics-similarity/gpu-basi ...

  2. 给大家推荐一个python的学习网站 http://www.codecademy.com

    注册之后,可以跟着指导,自己编码学习,比较方面: 再推荐一个在线编译的代码网站,c/c++ python  都可以: http://codepad.org

  3. 关于C语言程序条件编译的简单使用方法

    #include <stdio.h> #include <stdlib.h> #define Mode //如果定义了Mode,那么就执行这个函数 #ifdef Mode vo ...

  4. Ubuntu14.04安装androidStudio错误解除

    错误1 ubuntu androidStudio :app:mergeDebugResources FAILED 办法: sudo dpkg --add-architecture i386 sudo ...

  5. iframe中 父页面和子页面查找元素的方法

    从父页面中查找iframe子页面中对象的方法:JS: document.getElementById('iframe').contentWindow //查找iframe加载的页面的window对象 ...

  6. vue中get和post请求

    import axios from 'axios'; import router from '@/router'; import {     setSessionStorage,     getSes ...

  7. Resin4下JSP文件导出问题的解决

           之前我在Resin3下采用JSP代码对一些硬盘上的文件作读取以后再输出或者生成一些特殊格式文件(如Excel)再输出供下载,这些文件输出JSP代码在Resin4以后输出的文件都产生错误无 ...

  8. RDC去省赛玩前の日常训练 Chapter 2

    2018.4.9 施展FFT ing! 马上就要和前几天学的斯特林数双剑合璧了!

  9. java之Spring(AOP)前奏-动态代理设计模式(上)

    我们常常会遇到这样的事,项目经理让你为一个功能类再加一个功能A,然后你加班为这个类加上了功能A: 过了两天又来了新需求,再在A功能后面加上一个新功能B,你加班写好了这个功能B,加在了A后面:又过 了几 ...

  10. SSH密钥认证添加方法和一些实用配置

    更改SSH端口号 用账号密码进入主机 sudo nano /etc/ssh/sshd-config 再其中添加Port 22等或改变该条 添加公钥到主机 cd ~ sudo mkdir .ssh 此处 ...