Я пытаюсь записать сжатые данные в таблицу журналов с помощью целевой базы данных NLog. Регистратор выходит из строя с сообщением:Запись двоичных данных в целевую базу данных NLog
«Неверное преобразование из типа данных nvarchar в varbinary (max) не разрешено. Используйте функцию CONVERT для запуска этого запроса».
Столбец базы данных определяется как varbinary (max), а данные, добавленные к свойствам LogEventInfo, представляют собой массив байтов. Я не вижу рендерера макета NLog, который я мог бы сообщить NLog. Я отправляю ему двоичные данные. Есть идеи?
Заранее спасибо.
*** ЗАПРОШЕННЫЙ ИНФОРМАЦИЯ ** * *
Вот моя цель NLog
<target type="Database" name="atom_db" connectionstring="Server=MYSERVER;Database=MYDB;Trusted_Connection=True;">
<dbprovider>mssql</dbprovider>
<commandText>insert into TAtomLog ([requestdt], [sessionid], [clientip], [clientuser], [application], [method], [data]) values (@RequestDt, @SessionId, @ClientIP, @ClientUser, @SessionType, @Method, @Data);</commandText>
<parameter name="@RequestDt" layout="${event-context:item=RequestDt}"/>
<parameter name="@SessionId" layout="${event-context:item=${guid:SessionId}"/>
<parameter name="@ClientIP" layout="${event-context:item=ClientIP"/>
<parameter name="@ClientUser" layout="${event-context:item=ClientUser"/>
<parameter name="@SessionType" layout="${event-context:item=SessionType"/>
<parameter name="@Method" layout="${event-context:item=Method"/>
<parameter name="@Data" layout="${event-context:item=Data"/>
</target>
Вот мой C# код, который создает LogEventInfo и вызовы Логгер. Вызов StringCompressor.CompressString возвращает «байт []»
var ev = new LogEventInfo(LogLevel.Info, AtomLogger.LoggerName, string.Empty);
ev.Properties.Add("RequestDt", DateTime.Now);
ev.Properties.Add("ClientIP", clientip);
ev.Properties.Add("ClientUser", clientuser);
ev.Properties.Add("SessionId", sessionid);
ev.Properties.Add("SessionType", sessiontype);
ev.Properties.Add("Method", new StackFrame(1).GetMethod().Name);
ev.Properties.Add("Data", StringCompressor.CompressString(data));
AtomLogger.GetDBLoggerInstance().Log(ev);
Можете ли вы опубликовать образец целевой конфигурации, основанный на вашей текущей конфигурации? Также как вы устанавливаете массив байтов в LogEventInfo? – nemesv
См. Выше запрошенные данные. – user481779