log4net是一个非常优秀和完善的第三方开源组件,网上讲log4net的各种配置以及使用的文章很多不必累述,今天记录一下工作中遇到的当将日志插入数据库中的动作不仅仅只是简单的 insert log(message) values (@message))这么简单时,我们可能要用到存储过程,也就是CommandType的类型System.Data.CommandType.StoredProcedure,如何实现?
1、配置文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<logger name="testLogger">
<level value="DEBUG"/>
<appender-ref ref="ADONetAppender" />
</logger>
<appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
<bufferSize value="1"/>
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<connectionString value="data source=mahuijun\sql2008;initial catalog=test;integrated security=False;persist security info=True;User ID=sa;Password=123456" />
<!--<commandType value="System.Data.CommandType.StoredProcedure" /> -->
<commandType value="4" />
<commandText value="updatelog"/>
<!--<commandText value="insert into log(message) values(@message)"/> -->
<parameter>
<parameterName value="@message"/>
<dbType value="String"/>
<size value="50"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message"/>
</layout>
</parameter>
</appender>
</log4net>
</configuration>
2、测试代码很简单:
log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo("..\\..\\cfg\\log4net.config"));
ILog logger = LogManager.GetLogger(Assembly.GetCallingAssembly(), "testLogger");
logger.Fatal("log4net");
3、数据库表结构及存储过程:
CREATE TABLE [log](
[message] [nvarchar](50) NULL
)
CREATE PROC [updatelog](
@message NVARCHAR(50)
) AS
INSERT INTO dbo.log
( message )
VALUES (
@message -- message - nvarchar(50)
)
这里说的简单点,尤其是存储过程,只是讲讲log4net使用存储过程怎么配置和使用。至于复杂的存储过程逻辑在具体应用中自己去实现吧。这里多说一句:如上CommandType的设置一定要注意,其value的值一定是要设置为4,而不是像注释掉的 System.Data.CommandType.StoredProcedure,否则会出现类型转化错误而无法记入数据库。