我目前在使用NLog将XML值写入数据库表时遇到问题。我正在使用WCF和C#
我有一个请求XML对象,该对象正在写入数据库,并且如果我按如下方式使用内置的“消息”对象,则它会起作用:
NLog.Config
<parameter name="@message" layout="${message}" />
后面的代码:
logger.Debug("{@value1}", new { request1 = request});
但是,如果我尝试将其写入另一个字段,例如:
<parameter name="@Request" layout="${event-properties:value1}" />
它不会将对象的值写入表中,但是:
“ MyServices.Types.Request”
请求类型为:
namespace MyServices.Types
{
[DataContract]
public class Request
{
[DataMember]
public string MessageHeader { get; set; }
[DataMember]
public int EventType { get; set; }
[DataMember]
public string Identification { get; set; }
[DataMember]
public DateTime VisitDate { get; set; }
}
}
这是有原因的吗? “邮件”属性似乎正常工作
答案 0 :(得分:4)
即使使用结构化日志记录,事件属性也不会转换为结构化格式-它使用的是ToString
当前仅支持JSON序列化,不支持XML
<parameter name="@Request" layout="${event-properties:value1:format=@}" />
有关更多选项和示例,请参见${event-properties} docs
答案 1 :(得分:0)
NLog 4.6允许您将XML呈现到DatabaseTarget中:
<parameter name="@Request" DbType="SqlDbType.Xml">
<layout type="xmllayout" includeAllProperties="true" />
</parameter>
NLog 4.6还允许您设置参数的DbType。参见aslo https://github.com/NLog/NLog/wiki/XmlLayout