Nlog 以编程方式设置数据库目标并访问自定义日志消息属性
Nlog set Database target programatically and access custom log message properties
我需要支持数据库日志记录。
为此,我决定使用 nlog,因为它带来了数据库支持。
但首先我需要以编程方式设置配置。
据我了解,我必须为目标设置布局。
但是 class "DatabaseTarget" 没有任何与布局相关的 属性 :/.
var dbTarget = new DatabaseTarget();
dbTarget.ConnectionString = LogConnectionString;
dbTarget.CommandType = System.Data.CommandType.StoredProcedure;
dbTarget.CommandText = "exec dbo.InsertLog @level=${level}, @callSite=${callsite}, @message=${message}, @stackTrace=${stacktrace}, @machinename=${machinename}, @processname=${processname}";
DatabaseTarget 是否真的需要布局定义。如果是这样,我该如何以编程方式设置它?
另外我想传递一些信息。但我不确定如何为程序分配这些信息。
据我了解,我可以分配这些变量:
https://github.com/nlog/nlog/wiki/Layout-Renderers
但 NLog 支持其 Log 方法的通用参数。它看起来像这样:
_nLog.Log<AJourFaultLevel>(ConvertLogLevel(logEntry.Level), logEntry.Message, logEntry.Fault);
如何为我的存储过程分配传递的 "logEntry.Fault" 值?
此致
您当前的日志语句将 logEntry.Fault 作为参数注入 string.Format(logEntry.Message, logEntry.Fault)
:
_nLog.Log<AJourFaultLevel>(ConvertLogLevel(logEntry.Level), logEntry.Message, logEntry.Fault);
如果您使用的是 NLog 4.5,那么您可以使用 structured-logging,您可以在其中命名参数,如下所示:
_nLog.Log<AJourFaultLevel>(ConvertLogLevel(logEntry.Level), "Fault occurred: {AJourFaultLevel}", logEntry.Fault);
然后您可以使用 ${event-properties:item=}
:
访问命名参数
dbTarget.CommandText = "exec dbo.InsertLog @level=${level}, @callSite=${callsite}, @message=${message}, @stackTrace=${stacktrace}, @machinename=${machinename}, @processname=${processname}, @faultLevel=${event-properties:item=AJourFaultLevel}";
我需要支持数据库日志记录。 为此,我决定使用 nlog,因为它带来了数据库支持。 但首先我需要以编程方式设置配置。 据我了解,我必须为目标设置布局。 但是 class "DatabaseTarget" 没有任何与布局相关的 属性 :/.
var dbTarget = new DatabaseTarget();
dbTarget.ConnectionString = LogConnectionString;
dbTarget.CommandType = System.Data.CommandType.StoredProcedure;
dbTarget.CommandText = "exec dbo.InsertLog @level=${level}, @callSite=${callsite}, @message=${message}, @stackTrace=${stacktrace}, @machinename=${machinename}, @processname=${processname}";
DatabaseTarget 是否真的需要布局定义。如果是这样,我该如何以编程方式设置它?
另外我想传递一些信息。但我不确定如何为程序分配这些信息。 据我了解,我可以分配这些变量: https://github.com/nlog/nlog/wiki/Layout-Renderers
但 NLog 支持其 Log 方法的通用参数。它看起来像这样:
_nLog.Log<AJourFaultLevel>(ConvertLogLevel(logEntry.Level), logEntry.Message, logEntry.Fault);
如何为我的存储过程分配传递的 "logEntry.Fault" 值?
此致
您当前的日志语句将 logEntry.Fault 作为参数注入 string.Format(logEntry.Message, logEntry.Fault)
:
_nLog.Log<AJourFaultLevel>(ConvertLogLevel(logEntry.Level), logEntry.Message, logEntry.Fault);
如果您使用的是 NLog 4.5,那么您可以使用 structured-logging,您可以在其中命名参数,如下所示:
_nLog.Log<AJourFaultLevel>(ConvertLogLevel(logEntry.Level), "Fault occurred: {AJourFaultLevel}", logEntry.Fault);
然后您可以使用 ${event-properties:item=}
:
dbTarget.CommandText = "exec dbo.InsertLog @level=${level}, @callSite=${callsite}, @message=${message}, @stackTrace=${stacktrace}, @machinename=${machinename}, @processname=${processname}, @faultLevel=${event-properties:item=AJourFaultLevel}";