使用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}"/>
..但那也行不通。我必须编写一个自定义模式布局或什么?谢谢。