NLog 使用 WCF C#.NET 将对象写入数据库
NLog issue writing object to database using WCF C#.NET
我目前在使用 NLog 将 XML 值写入数据库 table 时遇到问题。我正在使用 WCF 和 C#
我有一个正在写入数据库的请求 XML 对象,如果我按如下方式使用内置 "message" 对象,它会起作用:
NLog.Config
<parameter name="@message" layout="${message}" />
后面的代码:
logger.Debug("{@value1}", new { request1 = request});
但是如果我尝试将它写入另一个字段,例如:
<parameter name="@Request" layout="${event-properties:value1}" />
它不会将对象的值写入 table,而是:
"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; }
}
}
这有什么原因吗? "Message" 属性 似乎可以正常工作
(这是针对旧版 NLog 的回答。最新的请参阅 Rolf 的回答)
即使使用结构化日志记录,事件属性也不会转换为结构化格式 - 它使用 ToString
目前只支持JSON序列化,不支持XML
<parameter name="@Request" layout="${event-properties:value1:format=@}" />
有关更多选项和示例,请参阅 ${event-properties} docs
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
我目前在使用 NLog 将 XML 值写入数据库 table 时遇到问题。我正在使用 WCF 和 C#
我有一个正在写入数据库的请求 XML 对象,如果我按如下方式使用内置 "message" 对象,它会起作用:
NLog.Config
<parameter name="@message" layout="${message}" />
后面的代码:
logger.Debug("{@value1}", new { request1 = request});
但是如果我尝试将它写入另一个字段,例如:
<parameter name="@Request" layout="${event-properties:value1}" />
它不会将对象的值写入 table,而是:
"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; }
}
}
这有什么原因吗? "Message" 属性 似乎可以正常工作
(这是针对旧版 NLog 的回答。最新的请参阅 Rolf 的回答)
即使使用结构化日志记录,事件属性也不会转换为结构化格式 - 它使用 ToString
目前只支持JSON序列化,不支持XML
<parameter name="@Request" layout="${event-properties:value1:format=@}" />
有关更多选项和示例,请参阅 ${event-properties} docs
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