1
我正試圖通過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>
這裏是創建LogEventInfo並呼籲我的C#代碼記錄器。到StringCompressor.CompressString回報「的byte []」
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