.netCore Nlog 配置模板

.netCore Nlog 配置模板

	之前一直在从. netFrameWork 往.netCore 方向发展,最早使用的日志比较多的是Log4net,但是发现但是Log4net也有一个让我比较头痛的
	地方就是感觉配置过于复杂,根本记不住,每次都必须去查阅资料,在.netCore官网上发现 Nlog的相关配置,Nlog没有Log4net老牌,使用
	从Nuget下载量来看也没有Log4net用户量大,但是它却一直在保持高速的更新状态,从github主页上看它所支持的平台也相当广泛,从.net
	环境到mono再到现在最新的Xamarin均支持:

在这里插入图片描述
.netCore 下载配置:
在这里插入图片描述

Nlog 自定义全局变量:

// 配置一个 Nlog全局变量 连接数据库时字符串
NLog.GlobalDiagnosticsContext.Set("NlogDbConStr", sqlStr);

program.cs 注入

public static IWebHostBuilder CreateWebHostBuilder(string[] args, IConfiguration config) =>
           WebHost.CreateDefaultBuilder(args)
               .UseIISIntegration()
               .UseUrls(config["urls"])
               .UseStartup<Startup>()
               .ConfigureLogging(logging =>
               {
                   logging.ClearProviders();
                   logging.SetMinimumLevel(LogLevel.Trace);
               })
               .UseNLog();  // NLog: setup NLog for Dependency injection

.config 文件配置

<?xml version="1.0" encoding="utf-8"?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      autoReload="true"
      throwExceptions="true"
      internalLogLevel="warn"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <!--internalLogFile="logfiles"-->
  <targets async="true">
    <!--屏幕打印消息-->
    <target name="console" xsi:type="ColoredConsole"
                    layout="${newline}=======================================================================
                            ${newline} 【当前时间】: ${date:format=yyyy-MM-dd HH\:mm\:ss}                           
                            ${newline} 【 级 别 】:${level}                             
                            ${newline} 【 行 数 】:${callsite-linenumber}                
                            ${newline} 【 方 法 】:${callsite:className=true:methodName=true:skipFrames=1}                                                 
                            ${newline} 【Message】:${message}    
                            ${newline} 【 堆 栈 】: ${stacktrace}
                            ${newline} 【 线 程 】: ${threadname}  
                            ${newline} 【 名 称 】: ${machinename}
                            ${newline} 【 程序域基础目录 】: ${basedir}
                            " />

    <!--VS输出窗口-->
    <target name="debugger" xsi:type="Debugger"
                     layout="${newline}=======================================================================
                            ${newline} 【当前时间】: ${date:format=yyyy-MM-dd HH\:mm\:ss}                           
                            ${newline} 【 级 别 】:${level}                             
                            ${newline} 【 行 数 】:${callsite-linenumber}                
                            ${newline} 【 方 法 】:${callsite:className=true:methodName=true:skipFrames=1}                                                 
                            ${newline} 【Message】:${message} 
                            ${newline} 【 堆 栈 】: ${stacktrace}
                            ${newline} 【 线 程 】: ${threadname}  
                            ${newline} 【 名 称 】: ${machinename}
                            ${newline} 【 程序域基础目录 】: ${basedir}
                            " />

    <!--保存至文件-->
    <target name="info" xsi:type="File" maxArchiveFiles="30"
                    fileName="${basedir}/Logs/Info/${shortdate}.txt"
                     layout="${newline}=======================================================================
                            ${newline} 【当前时间】: ${date:format=yyyy-MM-dd HH\:mm\:ss}
                            ${newline} 【 级 别 】:${level}                             
                            ${newline} 【 行 数 】:${callsite-linenumber}                
                            ${newline} 【 方 法 】:${callsite:className=true:methodName=true:skipFrames=1}                                             
                            ${newline} 【Message】:${message}  
                            ${newline} 【 堆 栈 】: ${stacktrace}
                            ${newline} 【 线 程 】: ${threadname}  
                            ${newline} 【 名 称 】: ${machinename}
                            ${newline} 【 程序域基础目录 】: ${basedir}
                            " />

    <!--保存至文件-->
    <target name="error" xsi:type="File" maxArchiveFiles="30"
                    fileName="${basedir}/Logs/Error/${shortdate}.txt"
                    layout="${newline}=======================================================================
                            ${newline} 【当前时间】: ${date:format=yyyy-MM-dd HH\:mm\:ss}
                            ${newline} 【 级 别 】:${level}                             
                            ${newline} 【 行 数 】:${callsite-linenumber}                
                            ${newline} 【 方 法 】:${callsite:className=true:methodName=true:skipFrames=1}                                                 
                            ${newline} 【Message】:${message}
                            ${newline} 【 堆 栈 】: ${stacktrace}
                            ${newline} 【 线 程 】: ${threadname}  
                            ${newline} 【 名 称 】: ${machinename}
                            ${newline} 【 程序域基础目录 】: ${basedir}
                            " />
    <!--写入数据库-->
    <target xsi:type="Null" name="blackhole"/>
    <target name="database" xsi:type="Database"
          dbProvider="System.Data.SqlClient"
          connectionString="${gdc:NlogDbConStr}">
      <commandText>
        insert into tblLog (
        Level, LineNumber, ClassName, Message
        ) values (
        @Level,@LineNumber,@ClassName,@Message
        );
      </commandText>
      <parameter name="@Level" layout="${level}" />
      <parameter name="@LineNumber" layout="${callsite-linenumber}" />
      <parameter name="@ClassName" layout="${callsite:className=true:methodName=true:skipFrames=1}" />
      <parameter name="@Message" layout="${message}" />
    </target>

    <target name="TraceDb" xsi:type="Database"
          dbProvider="System.Data.SqlClient"
          connectionString="${gdc:NlogDbConStr}">
      <commandText>
        insert into [dbo].[tblApiLog] (
        ServiceName,Methed,Url,ExecPath,Params,Ip,Port,ResultStatus
        ) values(
        @ServiceName,@Methed,@Url,@ExecPath,@Params,@Ip,@Port,@ResultStatus
        );
      </commandText>
      <parameter name="@ServiceName" layout="${event-context:item=ServiceName}"/>
      <parameter name="@Methed" layout="${event-context:item=Methed}"/>
      <parameter name="@Url" layout="${event-context:item=Url}"/>
      <parameter name="@ExecPath" layout="${event-context:item=ExecPath}"/>
      <parameter name="@Params" layout="${event-context:item=Params}"/>
      <parameter name="@Ip" layout="${event-context:item=Ip}"/>
      <parameter name="@Port" layout="${event-context:item=Port}"/>
      <parameter name="@ResultStatus" layout="${event-context:item=ResultStatus}"/>
    </target>

  </targets>

  <rules>
    <logger name="*" minlevel="Warn" writeTo="database" />
    <logger name="*" minlevel="Warn" writeTo="console" />
    <logger name="*" minlevel="Debug" writeTo="debugger" />
    <logger name="*" minlevel="Info" maxlevel="Info" writeTo="info" />
    <logger name="*" minlevel="Trace" maxlevel="Trace" writeTo="TraceDb" />
    <logger name="*" minlevel="Error" writeTo="error" />
    <logger name="*" minlevel="Error" writeTo="database" />
  </rules>
</nlog>
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值