IBatis.net使用二--用Log4net写日志

时间:2022-08-09 21:40:06

查看文章索引请通过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="------------------------------------------------------------&#xD;&#xA;" />
      <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]&#13;&#10;" />
      <footer value="[Footer]&#13;&#10;" />
      <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下载