使用SQL Server 2012,這裏是我的表:Log4net使用自定義appender將自定義對象寫入sql數據庫?
CREATE TABLE [dbo].[Test]
(
[One] [VARCHAR](50) NOT NULL,
[Two] [VARCHAR](50) NOT NULL
) ON [PRIMARY]
這裏是我的appender:
<appender name="TestAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="1" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionString value="data source=localhost;initial catalog=ApplicationLog;integrated security=false;persist security info=True;User ID=someUser;Password=somePassword" />
<commandText value="INSERT INTO [dbo].[Test] ([One],[Two]) VALUES (@one, @two)" />
<parameter>
<parameterName value="@one"/>
<dbType value="String"/>
<size value="50"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%one"/>
</layout>
</parameter>
<parameter>
<parameterName value="@two"/>
<dbType value="String"/>
<size value="50"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%two"/>
</layout>
</parameter>
</appender>
這裏是我得到的代碼記錄器的實例,並且嘗試寫它:
private static readonly ILog TestLogger = LogManager.GetLogger("TestAppender");
TestLogger.Info(new Test {One = "someOne", Two = "someTwo"});
這裏是我的測試類:
public class Test
{
public string One { get; set; }
public string Two { get; set; }
}
通過這種步進之後,我有一個紀錄在我的表和列的內容是這樣的:
One: "one" Two: "12wo"
到底是什麼?「12WO」?我知道我在這裏錯過了一些東西。我認爲我的轉換模式是錯誤的。我試過這個:
<conversionPattern value="%property{one}"/>
..但那也行不通。我必須編寫一個自定義模式佈局或什麼?謝謝。