我目前在使用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; }
}
}
这有什么原因吗?"消息"属性似乎正常工作
(这是旧NLog版本的答案。有关最新信息,请参阅罗尔夫的答案(
即使使用结构化日志记录,事件属性也不会转换为结构化格式 - 它使用ToString
目前仅支持 JSON 序列化,不支持 XML
<parameter name="@Request" layout="${event-properties:value1:format=@}" />
有关更多选项和示例,请参阅 ${事件属性} 文档
NLog 4.6 允许您将 XML 呈现到 DatabaseTarget 中:
<parameter name="@Request" DbType="SqlDbType.Xml">
<layout type="xmllayout" includeAllProperties="true" />
</parameter>
NLog 4.6 还允许您设置参数的 DbType。查看 https://github.com/NLog/NLog/wiki/XmlLayout