zoukankan      html  css  js  c++  java
  • iBatis.NET中log4不能用FILEWATCH

    经过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>

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

    原创作品出自努力偷懒,转载请说明文章出处http://www.cnblogs.com/kfarvid/

  • 相关阅读:
    jquery做的图片挂起的效果
    Android数据存储之DOM解析XML文件(输出部分)
    Android数据存储之JSON数据解析(输出部分)
    Android网络编程之Web Service获取天气预报( 获取省市填充下拉列表)
    Android数据存储之DOM解析XML文件(读取部分)
    Android网络编程之一个Android登录系统模块的实现(服务器端)
    Android数据存储之XmlPull解析XML文件(读取部分)
    Android数据存储之XmlPull解析XML文件(输出部分)
    Android数据存储之JSON数据解析(读取部分)
    Android网络编程之一个Android登录系统模块的实现(客户端)
  • 原文地址:https://www.cnblogs.com/kfarvid/p/1829446.html
Copyright © 2011-2022 走看看