1

我試圖在log4net上使用SQL Server Compact Edition(v4.0)。有一個偉大的指南here。它使用Compact Edition 3.5,但大多數步驟應該是相同的。使用帶有log4net的SQL Server Ce 4.0

所以,我創建了內部「的App_Data」一個SQL Server CE 4.0數據庫,在我的MVC Web應用程序「日誌」表,並確保該System.Data.SqlServerCe「複製本地」是。我還將連接字符串更改爲app_data文件夾。

我的appender看起來是這樣的:

<appender name="SqlCeAppender" type="log4net.Appender.AdoNetAppender"> 
    <connectionType value="System.Data.SqlServerCe.SqlCeConnection, System.Data.SqlServerCe" /> 
    <connectionString value="Data Source=|DataDirectory|\='log4net.sdf'" /> 
    <commandText 
    value="INSERT INTO Log 
     ([Date],[Thread],[Level],[Logger],[Message], 
     [Exception], [UserName], [Custom]) 
     VALUES 
     (@log_date, @thread, @log_level, @logger, @message, 
     @exception, @username, @custom)" /> 
    <parameter> 
     <parameterName value="@log_date" /> 
     <dbType value="DateTime" /> 
     <layout type="log4net.Layout.RawUtcTimeStampLayout" /> 
    </parameter> 
    <parameter> 
     <parameterName value="@thread" /> 
     <dbType value="String" /> 
     <size value="255" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%thread" /> 
     </layout> 
    </parameter> 
    <parameter> 
     <parameterName value="@log_level" /> 
     <dbType value="String" /> 
     <size value="50" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%level" /> 
     </layout> 
    </parameter> 
    <parameter> 
     <parameterName value="@logger" /> 
     <dbType value="String" /> 
     <size value="255" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%logger" /> 
     </layout> 
    </parameter> 
    <parameter> 
     <parameterName value="@message" /> 
     <dbType value="String" /> 
     <size value="4000" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%message" /> 
     </layout> 
    </parameter> 
    <parameter> 
     <parameterName value="@exception" /> 
     <dbType value="String" /> 
     <size value="2000" /> 
     <layout type="log4net.Layout.ExceptionLayout" /> 
    </parameter> 
    <parameter> 
     <parameterName value="@username" /> 
     <dbType value="String" /> 
     <size value="255" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%username" /> 
     </layout> 
    </parameter> 
    <parameter> 
     <parameterName value="@custom" /> 
     <dbType value="String" /> 
     <size value="255" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%property{Custom}" /> 
     </layout> 
    </parameter> 
    </appender> 

而且......沒有任何反應 - 沒有日誌。當我換出我的文本文件appender時,我得到日誌,所以這與這個appender有關 - 但我不知道是什麼。誰能幫忙?

回答

0

好的 - 我最終放棄了這一點,並決定通過編寫一個自定義的Appender來實現它,它使用Entity Framework來編寫日誌 - 實際上對我更好,因爲我可以添加更多關於錯誤的信息我的自定義appender。

+0

你能分享一些代碼嗎?在此,我對如何創建使用實體框架的自定義'Appender'非常感興趣。 – InteXX 2015-02-22 13:43:59

+0

@InteXX對不起,這是以前的工作,我沒有那個代碼了。我記得它有很好的文檔記錄,我認爲有些示例代碼顯示了一個自定義的appender。 – 2015-03-09 16:07:30

+0

無論如何,謝謝你。我會想象出來。 – InteXX 2015-03-09 21:09:01

1

我相信你遇到的問題是bufferSize沒有設置。設置bufferSize選項是這樣的:

<bufferSize value="1" /> 

把那個放在你的appender中,你應該很好去。

1

我實際上有同樣的問題,但設法解決它。

我發現一對夫婦在你的例題:

<connectionString value="Data Source=|DataDirectory|\='log4net.sdf'" /> 

必須改成:

<connectionString value="Data Source=|DataDirectory|log4net.sdf" /> 

而且我也刪除不在默認log4net的表模式的自定義字段(用戶名和自定義)所以查詢變成:

INSERT INTO Log 
     ([Date],[Thread],[Level],[Logger],[Message], 
     [Exception]) 
     VALUES 
     (@log_date, @thread, @log_level, @logger, @message, 
     @exception) 

當然,我刪除了2 rela特區<parameter>區塊。

我還添加了@BiggsTRC建議的<bufferSize>節點。

然後一切開始工作。