• 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="------------------------------------------------------------&#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下载

  • 相关阅读:
    阿米巴
    linux系统和依赖包常用下载地址
    chm格式文件能打开,但看不到内容问题
    云计算的三层SPI模型
    云计算相关的一些概念Baas、Saas、Iaas、Paas
    IOS 开发环境,证书和授权文件等详解
    Android MDM参考
    理解RESTful架构
    联想小新Air2020锐龙版在Ubuntu下添加指纹识别
    避免踩坑,这才是为知笔记导入印象笔记数据的正确姿势
  • 原文地址:https://www.cnblogs.com/seesea125/p/2737355.html
Copyright © 2020-2023  润新知