IBatis.net使用二--用Log4net写日志
查看文章索引请通过http://www.cnblogs.com/seesea125/archive/2012/04/17/2453256.html
IBatis.Net中提供了方便的日志处理,可以引用IBatisNet.Common.Logging.Log4Net.dll写日志,当然IBatisNet.Common.dll这个是必须引用的。
IBatis.Net处理日志不需要写代码实现,只需要配置就可以了,下面贴出Log4Net的配置文件Log4net.config,并加以解释。(这个文件一般放在站点根目录下,当然放其他目录下也行,只要能在程序运行时的global.asa的Application_Start方法里加上监视即可)
第一步: 首先添加在程序运行时的Application_Start方法里加上监视:
//ConfigureAndWatch这个是添加Log4net.config监视,并在修改Log4net.config的时候也及时的修改配置
log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "Log4net.config"));
第二步:Log4net.config的配置,注释已经加上:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler, log4net, Version=1.2.10.0, Culture=Neutral, PublicKeyToken=bf100aa01a5c2784" />
</configSections>
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>
<!--每个<appender>子节点代表一种记录日志的方式-->
<log4net>
<!-- 这个日志是系统其他地方写日志时候用到的设置 -->
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="./Logs\Log_" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd'.txt'" />
<staticLogFileName value="false" />
<layout type="log4net.Layout.PatternLayout">
<header value="------------------------------------------------------------
" />
<ConversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline%newline%newline" />
</layout>
</appender>
<root>
<level value="All" />
<appender-ref ref="RollingLogFileAppender" />
</root>
<!-- IBatisLogFile的日志 -->
<appender name="IBatisLogFile" type="log4net.Appender.RollingFileAppender">
<file value="./Logs\iBatis_" />
<appendToFile value="true" />
<datePattern value="yyyyMMdd'.txt'" />
<rollingStyle value="Date" />
<staticLogFileName value="false" />
<layout type="log4net.Layout.PatternLayout">
<header value="[Header] " />
<footer value="[Footer] " />
<conversionPattern value="%date{dd/MM/yyyy-HH:mm:ss} %m%newline%exception" />
</layout>
</appender>
<!-- IBatisMapperLogFile的日志 -->
<appender name="IBatisMapperLogFile" type="log4net.Appender.RollingFileAppender">
<file value="./Logs\iBatisMapper_" />
<appendToFile value="true" />
<datePattern value="yyyyMMdd'.txt'" />
<rollingStyle value="Date" />
<staticLogFileName value="false" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{dd/MM/yyyy-HH:mm:ss} %m%newline%exception" />
</layout>
</appender>
<!-- IBatisCacheLogFile的日志 -->
<appender name="IBatisCacheLogFile" type="log4net.Appender.RollingFileAppender">
<file value="./Logs\iBatisChache_.log" />
<appendToFile value="true" />
<datePattern value="yyyy-MM-dd" />
<rollingStyle value="Date" />
<staticLogFileName value="false" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{dd/MM/yyyy-HH:mm:ss} %m%newline%exception" />
</layout>
</appender>
<!-- 注意一定要加additivity="false",因为异常日志是往上传递的,如果不加这个属性,在系统的总日志里面也会有IBatisNet的日志,这样就重复记录了 -->
<logger name="IBatisNet" additivity="false">
<level value="ALL"/>
<!--如果想增加日志输出目的地,增加<appender-ref>节点就是了,注意后面的ref是在config中配置的appender name-->
<appender-ref ref="IBatisLogFile" />
</logger>
<!-- 注意一定要加additivity="false",因为异常日志是往上传递的,如果不加这个属性,在系统的总日志里面,以及IBatisNet里的日志里,也会有IBatisNet.DataMapper的日志,这样就重复记录了 -->
<logger name="IBatisNet.DataMapper" additivity="false">
<level value="ALL"/>
<appender-ref ref="IBatisMapperLogFile" />
</logger>
</log4net>
</configuration>
最后解释一下logger的name,这个name是代表的代码里的命名空间,也就是我们在代码里这么写的时候,ILog log=log4net.LogManager.GetLogger(typeof(Program)); 这个GetLogger(typeof(Program))也是获取命名空间的,这个获取的值和配置文件的name的值一样的时候,就根据appender-ref写到不同的介质去了。
另外logger的name是有继承关系的,比如
//a是代表命名空间,表示该命名空间下的日志由此logger负责
name=a
//a.b代表命名空间下某个类,表示该命名空间下的日志由此logger负责
name=a.b
那么a.b就会继承a,如果在a.b上不设置additivity="false",那么a.b的日志也会写到a里面去
第三步:在Web.Config里配置,iBATIS.NET通过IBatisNet.Common.Logging写的日志
<configSections>
<sectionGroup name="iBATIS">
<section name="logging" type="IBatisNet.Common.Logging.ConfigurationSectionHandler, IBatisNet.Common"/>
</sectionGroup>
</configSections>
<iBATIS>
<logging>
<logFactoryAdapter type="IBatisNet.Common.Logging.Impl.Log4NetLoggerFA, IBatisNet.Common.Logging.Log4Net">
<!--
inline :log4net 节点在App.Config/Web.Config 文件中配置
file:使用外置配置文件 (需要configFile参数配合使用,<arg key="configFile" value="外部配置文件")
file-watch: 与"file"一样,只是多了一个监视外部配置文件的变动功能,如果有变动则重新加载配置。
external:IBatis将不会尝试配置Log4Net。
-->
<arg key="configType" value="external"/>
</logFactoryAdapter>
</logging>
</iBATIS>
运行站点,发现站点根目录下已经有了logs这个文件夹,并开始写日志了
demo下载