文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>iBatis.NET中log4不能用FILE-WATCH

iBatis.NET中log4不能用FILE-WATCH

时间:2010-09-17  来源:努力去偷懒

经过Winform和Web项目测试,得出的结论是:IBatisNet.Common.Logging.Log4Net在配置configType属性时,不能使用FILE-WATCH的方式,使用INLINE的方式下可以正常使用。下面列出我的INLINE方式的配置文件。(Spring.NET+iBatis.NET日志+Spring.NET日志):

 

代码 <?xml version="1.0"?>
<configuration>
  <configSections>

    <!-- log1:定义log4net节点和common节点组,以及该节点组下的logging节点  -->
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
    <sectionGroup name="common">
      <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging"/>
    </sectionGroup>
    <!-- iBatis.log1:定义iBatis的日志配置  -->
    <sectionGroup name="iBATIS">
      <section name="logging" type="IBatisNet.Common.Logging.ConfigurationSectionHandler, IBatisNet.Common"/>
    </sectionGroup>
    <!-- 
  SP1:必须在.NET配置文件的<configSections>节点中注册这个类,
  注册了这个节点处理器后,配置文件中的<spring>节点才能起
  作用。(configSections必须是configuration下的第一个元素
  否则会编译出错。)
  context:容器资源列表(不能少,少了会出错)
  objects:容器里面的对象列表(不能少,少了会出错)
  -->
    <sectionGroup name="spring">
      <!--WebContextHandler是在Web项目中使用的-->
      <!--section name="context" type="Spring.Context.Support.WebContextHandler, Spring.Web"/-->
      <!--ContextHandler是在Web以外的项目中使用的-->
      <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
      <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core"/>
    </sectionGroup>
  </configSections>

  <!--
  SP2:配置Spring的容器,这样配置就不用在程序中显式地去创建
  Spring的容器,从而降低了程序对Spring的耦合。
  <context>节点的type属性是可选的,在Windows应用中,其默认值就是Spring.Context.Support.XmlApplicationContext
  -->
  <spring>
    <context>
      <!--SP3: 此处的配置文件是指包括了Spring.NET对象定义的XML文件,而非特指.config文件 -->
      <resource uri="config://spring/objects"/>
      <!--下面是引用.NET程序集内嵌资源时的URI语法:
      assembly://<AssemblyName>/<NameSpace>/<ResourceName>
      assembly://<程序集>/<命名空间>/<资源名称>
      SP_Manual:加入不同项目的不同xml配置信息。如:
      例:<resource uri="assembly://Piggy.NET.Web/Piggy.NET.Web/WebTest.xml"/>
      -->
      <resource uri="assembly://piggyWinForm/piggyWinFormTemplet/Objects.xml"/>
    </context>
    <!-- SP4:objects节点的xmlns元素是必需的,必须根据不同的应用添加不同的命名空间 -->
    <objects xmlns="http://www.springframework.net"/>
  </spring>

  <!-- log2:实现log1中所定义的节点组common-->
  <common>
    <logging>
      <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net">
        <!-- choices are INLINE, FILE, FILE-WATCH, EXTERNAL-->
        <!-- otherwise BasicConfigurer.Configure is used   -->
        <!-- log4net configuration file is specified with key configFile-->
        <arg key="configType" value="INLINE"/>
        <!-- 0 to 6 (1 Debug 4 Error)>
        <arg key="Level" value="ALL"/-->
      </factoryAdapter>
    </logging>
  </common>
  <!-- iBatis.log2:定义iBatis的日志配置  -->
  <iBATIS>
    <logging>
      <logFactoryAdapter type="IBatisNet.Common.Logging.Impl.Log4NetLoggerFA, IBatisNet.Common.Logging.Log4Net">
        <arg key="configType" value="INLINE"/>
      </logFactoryAdapter>
    </logging>
  </iBATIS>
  <!-- log3:实现log1中所定义的节点log4net-->
  <log4net debug="false">
    <!--appender为不同日志输出的配置 -->
    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
      <param name="File" value="Logs\Application.log.txt"/>
      <param name="datePattern" value="MM-dd HH:mm"/>
      <param name="AppendToFile" value="true"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
      </layout>
    </appender>
    <appender name="HttpTraceAppender" type="log4net.Appender.ASPNetTraceAppender">
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
      </layout>
    </appender>
    <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
      </layout>
    </appender>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="Logs\Log.txt"/>
      <param name="AppendToFile" value="true"/>
      <param name="MaxSizeRollBackups" value="10"/>
      <param name="MaximumFileSize" value="5MB"/>
      <param name="RollingStyle" value="Size"/>
      <param name="StaticLogFileName" value="true"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
      </layout>
    </appender>
    <!-- 告诉日志的所使用的等级以及所使用的日志输出配置 -->
    <!-- 下面是我自己改的,按日期生成日志的配置 -->
    <appender name="RollingLogFileAppender_Piggy" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="Logs\ExceptionLog"/>
      <param name="AppendToFile" value="true"/>
      <param name="MaxSizeRollBackups" value="10"/>
      <param name="MaximumFileSize" value="5MB"/>
      <param name="RollingStyle" value="Date"/>
      <param name="StaticLogFileName" value="false"/>
      <param name="DatePattern" value="yyyyMMdd&quot;.log&quot;"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
      </layout>
    </appender>
    <root>
      <level value="DEBUG"/>
      <appender-ref ref="RollingLogFileAppender_Piggy"/>
    </root>

    <!-- Set logging for Spring to INFO.  
         Logger names in Spring correspond to the namespace 
         加入下面这个logger可以在日志中自动输出Spring的INFO级别的信息-->
    <logger name="Spring">
      <level value="INFO" />
    </logger>
    <logger name="IBatisNet">
      <level value="INFO" />
    </logger>
    <!-- Print only messages of level DEBUG or above in the packages -->
    <logger name="IBatisNet.DataMapper.Configuration.Cache.CacheModel">
      <level value="DEBUG" />
    </logger>
    <logger name="IBatisNet.DataMapper.Configuration.Statements.PreparedStatementFactory">
      <level value="DEBUG" />
    </logger>
    <logger name="IBatisNet.DataMapper.LazyLoadList">
      <level value="DEBUG" />
    </logger>
    <logger name="IBatisNet.DataAccess.DaoSession">
      <level value="DEBUG" />
    </logger>
    <logger name="IBatisNet.DataMapper.SqlMapSession">
      <level value="DEBUG" />
    </logger>
    <logger name="IBatisNet.Common.Transaction.TransactionScope">
      <level value="DEBUG" />
    </logger>
    <logger name="IBatisNet.DataAccess.Configuration.DaoProxy">
      <level value="DEBUG" />
    </logger>
  </log4net>
  <startup>
    <supportedRuntime version="v2.0.50727"/>
  </startup>
</configuration>

 

 

原来是把log4net节点下的保存在“~\config\log4net.xml”中的,下面是iBatis.NET配置的日志不起作用的配置:

 

代码 <?xml version="1.0"?>
<configuration>
  <configSections>

    <!-- log1:定义log4net节点和common节点组,以及该节点组下的logging节点  -->
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
    <sectionGroup name="common">
      <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging"/>
    </sectionGroup>
    <!-- iBatis.log1:定义iBatis的日志配置  -->
    <sectionGroup name="iBATIS">
      <section name="logging" type="IBatisNet.Common.Logging.ConfigurationSectionHandler, IBatisNet.Common"/>
    </sectionGroup>
    <!-- 
  SP1:必须在.NET配置文件的<configSections>节点中注册这个类,
  注册了这个节点处理器后,配置文件中的<spring>节点才能起
  作用。(configSections必须是configuration下的第一个元素
  否则会编译出错。)
  context:容器资源列表(不能少,少了会出错)
  objects:容器里面的对象列表(不能少,少了会出错)
  -->
    <sectionGroup name="spring">
      <!--WebContextHandler是在Web项目中使用的-->
      <!--section name="context" type="Spring.Context.Support.WebContextHandler, Spring.Web"/-->
      <!--ContextHandler是在Web以外的项目中使用的-->
      <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
      <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core"/>
    </sectionGroup>
  </configSections>

  <!--
  SP2:配置Spring的容器,这样配置就不用在程序中显式地去创建
  Spring的容器,从而降低了程序对Spring的耦合。
  <context>节点的type属性是可选的,在Windows应用中,其默认值就是Spring.Context.Support.XmlApplicationContext
  -->
  <spring>
    <context>
      <!--SP3: 此处的配置文件是指包括了Spring.NET对象定义的XML文件,而非特指.config文件 -->
      <resource uri="config://spring/objects"/>
      <!--下面是引用.NET程序集内嵌资源时的URI语法:
      assembly://<AssemblyName>/<NameSpace>/<ResourceName>
      assembly://<程序集>/<命名空间>/<资源名称>
      SP_Manual:加入不同项目的不同xml配置信息。如:
      例:<resource uri="assembly://Piggy.NET.Web/Piggy.NET.Web/WebTest.xml"/>
      -->
      <resource uri="assembly://piggyWinForm/piggyWinFormTemplet/Objects.xml"/>
    </context>
    <!-- SP4:objects节点的xmlns元素是必需的,必须根据不同的应用添加不同的命名空间 -->
    <objects xmlns="http://www.springframework.net"/>
  </spring>

  <!-- log2:实现log1中所定义的节点组common-->
  <common>
    <logging>
      <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net">
        <!-- choices are INLINE, FILE, FILE-WATCH, EXTERNAL-->
        <!-- otherwise BasicConfigurer.Configure is used   -->
        <!-- log4net configuration file is specified with key configFile-->
        <arg key="configType" value="FILE-WATCH"/>
        <arg key="configFile" value="~\config\log4net.xml"/>
        <!-- 0 to 6 (1 Debug 4 Error)>
        <arg key="Level" value="ALL"/-->
      </factoryAdapter>
    </logging>
  </common>
  <!-- iBatis.log2:定义iBatis的日志配置  -->
  <iBATIS>
    <logging>
      <logFactoryAdapter type="IBatisNet.Common.Logging.Impl.Log4NetLoggerFA, IBatisNet.Common.Logging.Log4Net">
        <arg key="configType" value="FILE-WATCH"/>
        <arg key="configFile" value="~\config\log4net.xml"/>
      </logFactoryAdapter>
    </logging>
  </iBATIS>
<startup><supportedRuntime version="v2.0.50727"/></startup></configuration>

 

"~\config\log4net.xml"中的代码是:

 

代码 <?xml version="1.0" encoding="utf-8" ?>

<!-- log3:实现log1中所定义的节点log4net-->
<log4net debug="false">
  <!--appender为不同日志输出的配置 -->
  <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
    <param name="File" value="Logs\Application.log.txt"/>
    <param name="datePattern" value="MM-dd HH:mm"/>
    <param name="AppendToFile" value="true"/>
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
    </layout>
  </appender>
  <appender name="HttpTraceAppender" type="log4net.Appender.ASPNetTraceAppender">
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
    </layout>
  </appender>
  <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
    </layout>
  </appender>
  <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <param name="File" value="Logs\Log.txt"/>
    <param name="AppendToFile" value="true"/>
    <param name="MaxSizeRollBackups" value="10"/>
    <param name="MaximumFileSize" value="5MB"/>
    <param name="RollingStyle" value="Size"/>
    <param name="StaticLogFileName" value="true"/>
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
    </layout>
  </appender>
  <!-- 告诉日志的所使用的等级以及所使用的日志输出配置 -->
  <!-- 下面是我自己改的,按日期生成日志的配置 -->
  <appender name="RollingLogFileAppender_Piggy" type="log4net.Appender.RollingFileAppender">
    <param name="File" value="Logs\ExceptionLog"/>
    <param name="AppendToFile" value="true"/>
    <param name="MaxSizeRollBackups" value="10"/>
    <param name="MaximumFileSize" value="5MB"/>
    <param name="RollingStyle" value="Date"/>
    <param name="StaticLogFileName" value="false"/>
    <param name="DatePattern" value="yyyyMMdd&quot;.log&quot;"/>
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
    </layout>
  </appender>
  <root>
    <level value="DEBUG"/>
    <appender-ref ref="RollingLogFileAppender_Piggy"/>
  </root>

  <!-- Set logging for Spring to INFO.  
         Logger names in Spring correspond to the namespace 
         加入下面这个logger可以在日志中自动输出Spring的INFO级别的信息-->
  <logger name="Spring">
    <level value="INFO" />
  </logger>
  <logger name="IBatisNet">
    <level value="INFO" />
  </logger>
  <!-- Print only messages of level DEBUG or above in the packages -->
  <logger name="IBatisNet.DataMapper.Configuration.Cache.CacheModel">
    <level value="DEBUG" />
  </logger>
  <logger name="IBatisNet.DataMapper.Configuration.Statements.PreparedStatementFactory">
    <level value="DEBUG" />
  </logger>
  <logger name="IBatisNet.DataMapper.LazyLoadList">
    <level value="DEBUG" />
  </logger>
  <logger name="IBatisNet.DataAccess.DaoSession">
    <level value="DEBUG" />
  </logger>
  <logger name="IBatisNet.DataMapper.SqlMapSession">
    <level value="DEBUG" />
  </logger>
  <logger name="IBatisNet.Common.Transaction.TransactionScope">
    <level value="DEBUG" />
  </logger>
  <logger name="IBatisNet.DataAccess.Configuration.DaoProxy">
    <level value="DEBUG" />
  </logger>
</log4net>

 

这是血的教训,希望大家不要在这问题上走弯路,具体原因没去考究了。希望知道的大侠指点一二。

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载