如何在运行时给NLog配置传入想要的参数值

例如我们在给下述数据库Target做配置时,往往想在运行时传入我们想要的参数值,而不仅仅是这date、level这些内置的值:
    < target name ="dbLogging " xsi:type ="Database " connectionStringName ="EtlLogGlobal ">
      < commandText>
        insert into Logging([LogTime], [Machine],[Logger],[LogLevel],[Message],[ProcessName],[AppVersion]) values (@LogTime, @Machine,@Logger,@LogLevel,@Message,@ProcessName, @AppVersion);
      </ commandText>
      < parameter name="@DatabaseName" layout="${event-context:item=DatabaseName}" >
      < parameter name ="@LogTime " layout ="${date} " />
      < parameter name ="@LogLevel " layout ="${level} " />
      < parameter name ="@Logger " layout ="${logger} " />
      < parameter name ="@Message " layout ="${message} ${exception} " />
      < parameter name ="@Machine " layout ="${machinename} " />
      < parameter name ="@AppVersion " layout ="${assembly-version} " />
      < parameter name ="@ProcessName " layout ="${processname} " />
    </ target>

解决方法:
     step 1 用下述代码,把需要的信息写入LogEventInfo,再把它传入Log方法。LogEventInfo里不仅包含正常的Logger名、Message等,也包括用户自定义的信息。

            LogEventInfo ei = new LogEventInfo( LogLevel.Error, “LoggerName” , "Message");
          
         ei.Properties[ "DatabaseName"] = "master"
           
            LogHelper.NLogger.Log(ei);

     step 2 在配置文件里使用此方法传入刚才用户自定义的信息:
     < parameter name="@DatabaseName" layout="${event-context:item=DatabaseName}" >
展开阅读全文

没有更多推荐了,返回首页