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

时间:2018-08-20 08:24:03

标签: c# 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; }

    }
}

这是有原因的吗? “邮件”属性似乎正常工作

2 个答案:

答案 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