在这之前打算用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. 如何上传代码到git上

    windows环境下上传代码到git仓库 1,https://github.com/new 2,创建成功后是这样子的 3,远程添加github上的Blog仓库. 1)进入本地文件夹下-右击鼠标-Git ...

  2. LeetCode(34)-Palindrome Number

    题目: Determine whether an integer is a palindrome. Do this without extra space. 思路: 求一个整数是不是回文树.负数不是, ...

  3. javascript访问html元素的内容(2)

    对于(1)中最后一个包装方式创建的是一个方法,我们必须以方法调用的方式来使用它,这和其他默认的以属性返回结果略有不同,如果有强迫症的童鞋有些伤不起,那么我们下面就把它实现为属性返回的方式: //chi ...

  4. shell中的crontab定时任务

    一.crontab简介: crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动 ...

  5. Shell排序(改良的插入排序)

    Shell排序算法最初是由D.L Shell于1959年提出,假设要排序的元素有n个,则每个进行插入排序是并不是所偶的元素同时进行,而是去一段间隔. Shell首先将间隔设定为n/2,然后跳跃的进行插 ...

  6. maven技术(一)软件安装与配置

    maven技术在研发的过程中,作为资源依赖管理非常出色,例如在Java项目开发过程中,需要各种各样jar包,一般情况下开发者会直接将所用到的jar包放在project的lib目录下,提供自己程序调用. ...

  7. python3 数据科学基础

    第一章 1.Anaconda(最著名的python数据科学平台) 下面小伙伴们咱们来初初识下Anaconda吧 What is Anaconda???? 回答: (1).科学计算的平台 (2).有很多 ...

  8. RA layer request failed

    新整的Eclipse环境出现这个问题,细化内容是不能connect,后来想起切换Eclipse底层库的事情,然后打开Eclipse的SVN设置.把SVN Client借口由JavaHL改为PureJa ...

  9. 分布式文件系统MFS、Ceph、GlusterFS、Lustre的比较

    原文:http://blog.csdn.net/metaxen/article/details/7108958 MooseFS(MFS) Ceph GlusterFS Lustre Metadata ...

  10. 基于Python的数据分析(3):文件和时间

    在接下来的章节中,我会重点介绍一下我自己写的基于之前做python数据分析的打包接口文件common_lib,可以认为是专用于python的第三方支持库.common_lib目前包括文件操作.时间操作 ...