使用 WCF C#.NET 将对象写入数据库的 NLog 问题



我目前在使用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

最新更新