Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么NLog会导致FormatException?_C#_Nlog_Formatexception_Nlog Configuration - Fatal编程技术网

C# 为什么NLog会导致FormatException?

C# 为什么NLog会导致FormatException?,c#,nlog,formatexception,nlog-configuration,C#,Nlog,Formatexception,Nlog Configuration,我得到了内部NLog日志中的流量: 2020-05-10 16:38:09.9251 Warn Error when formatting a message. Exception: System.FormatException: The input string had an incorrect format. vid System.Text.StringBuilder.FormatError() vid System.Text.StringBuilder.AppendFormat

我得到了内部NLog日志中的流量:

2020-05-10 16:38:09.9251 Warn Error when formatting a message. Exception: System.FormatException: The input string had an incorrect format.
   vid System.Text.StringBuilder.FormatError()
   vid System.Text.StringBuilder.AppendFormatHelper(IFormatProvider provider, String format, ParamsArray args)
   vid System.String.FormatHelper(IFormatProvider provider, String format, ParamsArray args)
   vid System.String.Format(IFormatProvider provider, String format, Object[] args)
   vid NLog.LogEventInfo.CalcFormattedMessage()
如果按如下方式填写LogEventInfo:

var logEvent = new LogEventInfo();
                    logEvent.Level = logData.LogLevel.ToLogLevel();
                    logEvent.Message = JsonConvert.SerializeObject(logData, Formatting.Indented);
                    logEvent.Properties.Add("logdata", logData);
                    logEvent.Parameters = new object[1] { logData };
                    _genLogger.Log(logEvent);
警告似乎来自于我将消息设置为:

{
  "ComputerName": null,
  "LogLevel": 5,
  "LogId": null,
  "PersonId": null,
  "Text": "Communication Message",
  "TimeStamp": "2020-05-10T16:42:55.9456429+02:00",
  "ExceptionTyp": 7,
  "UserMessage": null,
  "RelatedObjectJsonString": "[\r\n  {\r\n    \"Address\": \"https://192.168.130.29:44476/MyApp5Service/Client\",\r\n    \"IsEmpty\": false,\r\n    \"IsFaulted\": false,\r\n    \"Action\": \"GetUserConfigurations\",\r\n    \"CallDirection\": 0,\r\n    \"EventTime\": \"2020-05-10T16:42:55.9406583+02:00\",\r\n    \"IsCallback\": false\r\n  }\r\n]",
  "SystemInformation": ""
}
我做错了什么


关于

消息是字符串格式或结构化格式的消息。这些参数用于格式化消息

logger.Info("Logon by user:{0} from ip_address:{1}", "Kenny", "127.0.0.1");
例子 字符串格式 当所有模板持有者都是数字时(介于
{
}
之间),消息将用作字符串格式的消息

logger.Info("Logon by user:{0} from ip_address:{1}", "Kenny", "127.0.0.1");
其中第一个参数是消息,其他参数是参数

结构化格式: 当前问题 所以我们在这里做了一些类似的事情:

string.Format(“{
“ComputerName”:空,
“日志级别”:5,
“LogId”:空,
“PersonId”:空,
“文本”:“通信信息”,
“时间戳”:“2020-05-10T16:42:55.9456429+02:00”,
“例外类型”:7,
“UserMessage”:空,
RelatedObjectJsonString:“[\r\n{\r\n\”地址\”:”https://192.168.130.29:44476/MyApp5Service/Client\“,\r\n\“IsEmpty\”:false、\r\n\“IsFaulted\”:false、\r\n\“Action\”:“GetUserConfigurations\”、\r\n\“CallDirection\”:0、\r\n\“EventTime\”:“2020-05-10T16:42:55.9406583+02:00\,\r\n\“IsCallback\”:false\r\n}\r\n],
“系统信息”:”
}“,日志数据);
不要认为那是你需要的;)

解决方案 我不确定您是否需要邮件中的数据。所以列出了两种选择

不需要自己对数据进行JSON转换。这可以在配置中完成

消息中的数据 我建议在这里使用结构化日志记录

logger.Log(loglevel, "Message with {LogData}", logData);
您可以在配置中将日志数据呈现为JSON,如下所示:

${event-properties:item=LogData:jsonEncode=true}
看到和

注意:您可以控制消息(
${message}
)的呈现方式,请参阅

信息中没有数据 使用
.WithProperty
,这是属性的语法糖


在这里,您还可以使用
${event properties:item=LogData:jsonecode=true}

将对象呈现为JSON,消息是字符串格式或结构化格式的消息。这些参数用于格式化消息

logger.Info("Logon by user:{0} from ip_address:{1}", "Kenny", "127.0.0.1");
例子 字符串格式 当所有模板持有者都是数字时(介于
{
}
之间),消息将用作字符串格式的消息

logger.Info("Logon by user:{0} from ip_address:{1}", "Kenny", "127.0.0.1");
其中第一个参数是消息,其他参数是参数

结构化格式: 当前问题 所以我们在这里做了一些类似的事情:

string.Format(“{
“ComputerName”:空,
“日志级别”:5,
“LogId”:空,
“PersonId”:空,
“文本”:“通信信息”,
“时间戳”:“2020-05-10T16:42:55.9456429+02:00”,
“例外类型”:7,
“UserMessage”:空,
RelatedObjectJsonString:“[\r\n{\r\n\”地址\”:”https://192.168.130.29:44476/MyApp5Service/Client\“,\r\n\“IsEmpty\”:false、\r\n\“IsFaulted\”:false、\r\n\“Action\”:“GetUserConfigurations\”、\r\n\“CallDirection\”:0、\r\n\“EventTime\”:“2020-05-10T16:42:55.9406583+02:00\,\r\n\“IsCallback\”:false\r\n}\r\n],
“系统信息”:”
}“,日志数据);
不要认为那是你需要的;)

解决方案 我不确定您是否需要邮件中的数据。所以列出了两种选择

不需要自己对数据进行JSON转换。这可以在配置中完成

消息中的数据 我建议在这里使用结构化日志记录

logger.Log(loglevel, "Message with {LogData}", logData);
您可以在配置中将日志数据呈现为JSON,如下所示:

${event-properties:item=LogData:jsonEncode=true}
看到和

注意:您可以控制消息(
${message}
)的呈现方式,请参阅

信息中没有数据 使用
.WithProperty
,这是属性的语法糖


在这里,您还可以使用
${event properties:item=LogData:jsonEncode=true}

将对象呈现为JSON,这里的想法是什么?为什么日志数据在消息、参数和属性中?我想最多应该是一个。这里有什么想法?为什么日志数据在消息、参数和属性中?我认为它最多应该是一个。谢谢,我有一个定制的LogToServiceTarget,在这里我从LogEventInfo“解包”我的数据,并将其发送到服务器,在那里它将被记录到数据库中。因此,在这种情况下,我只使用消息作为传输将发送到服务的数据对象的手段。要避免这些警告,最好的解决方案是什么?您不能使用此消息。消息将被解析(根据请求),而实际上并不是为此而设计的。请使用LogEventInfo属性,而不是消息。谢谢,我有一个自定义LogToServiceTarget,在这里我从LogEventInfo“解包”我的数据,并将其发送到服务器,在那里它将被记录到数据库。因此,在这种情况下,我只使用消息作为传输将发送到服务的数据对象的手段。要避免这些警告,最好的解决方案是什么?您不能使用此消息。消息将被解析(根据请求),而实际上并不是为此而设计的。请使用LogEventInfo属性,而不是消息。