例如我们在给下述数据库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}" >