当前位置:编程学习 > C#/ASP.NET >>

log4Net如何能做到只有发生error时才出力SQL文?

log4Net和iBatis结合,如何能做到只有发生error时才出力SQL文?

log4Net.config理的配置如下:
<configuration>
  
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>
  <log4net>
    <appender name="rollingFile" type="log4net.Appender.RollingFileAppender,log4net" >
      <!--アプリケーションログ出力ファイルパス-->
      <!--<param name="File" value="log\ERR" />-->
      <param name="File" value="..\wwdg\log\app\ERR" />
      <param name="AppendToFile" value="true"/>
      <param name="RollingStyle" value="Date" />
      <!--アプリケーションログ出力ファイル拡張子-->
      <param name="DatePattern" value="_yyyyMM.LOG" />
      <param name="ConfigFileExtension" value="log"/>
      <param name="StaticLogFileName" value="false" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%n%d{yyyy/MM/dd HH:mm:ss}  %L%m%n"/>
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="levelMin" value="DEBUG" />
        <param name="levelMax" value="FATAL" />
      </filter>
      <!--<filter type="log4net.Filter.StringMatchFilter">
        <param name="StringToMatch" value="Error"/>
      </filter>-->
      <filter type="log4net.Filter.StringMatchFilter">
        <param name="StringToMatch" value="Exception"/>
        <param name="AcceptOnMatch" value="true"/>
      </filter>
      <filter type="log4net.Filter.DenyAllFilter" />
    </appender>

    <root>
      <!--アプリケーションログレベル-->
      <level value="Debug"/>
      <appender-ref ref="rollingFile"/>
    </root>

    <!--<logger name="IBatisNet.DataMapper.Configuration.Cache.CacheModel">
      <level value="ERROR" />
    </logger>-->
    <logger name="IBatisNet.DataMapper.Configuration.Statements.PreparedStatementFactory">
      <level value="ERROR" />
    </logger>
    <!--<logger name="IBatisNet.DataMapper.LazyLoadList">
      <level value="ERROR" />
    </logger>
    <logger name="IBatisNet.DataAccess.DaoSession">
      <level value="ERROR" />
    </logger>-->
    <logger name="IBatisNet.DataMapper.SqlMapSession">
      <level value="ERROR" />
    </logger>
    <!--<logger name="IBatisNet.Common.Transaction.TransactionScope">
      <level value="ERROR" />
    </logger>
    <logger name="IBatisNet.DataAccess.Configuration.DaoProxy">
      <level value="ERROR" />
    </logger>-->

  </log4net>
</configuration>


web.config里的配置如下:
<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">
          <arg key="configType" value="file-watch"/>
          <arg key="configFile" value="log4net.config" />
          <arg key="level"   value="ERROR"   />
        </logFactoryAdapter>
      </logging>
    </iBATIS>

按照如上的配置现在在debug级别能够打出sql文,但是我想在只有sql文有异常时才打出该sql文。
请问有什么解决方法吗? --------------------编程问答-------------------- 哟系~ --------------------编程问答-------------------- 麻烦大家,帮帮忙。 --------------------编程问答-------------------- ?????????????????????????????? --------------------编程问答-------------------- 应该有帮助文档,你找了来看看吧!里面应该有个级别属性可以设置,你把它设置为error就可以了. --------------------编程问答--------------------
<root>
<!--アプリケーションログレベル-->
<level value="ALL"/>
<appender-ref ref="rollingFile"/>
</root>

级别改成ALL
这是优先顺序FATAL < ERROR < WARN < INFO < DEBUG
你可以选择比ERROR大的  也就是说是FATAL システム停止するような致命的な障害
--------------------编程问答-------------------- 也就是说选择优先大的  比他小的级别也可以打印出来  包含关系  debug是最小的所以只能打印debug
一般我就用ALL  比较灵活些 --------------------编程问答-------------------- 我现在想要的是只把当前有错误的sql文打出来,如果把级别设置为All的话还是把其它的sql文也打出来了。
但是如果把设置为error级别时,按照我现在的配置打不出来sql文
<root>
<!--アプリケーションログレベル-->
<level value="error"/>
<appender-ref ref="rollingFile"/>
</root> --------------------编程问答--------------------
引用 5 楼 chopper7278 的回复:
XML code
<root>
<!--アプリケーションログレベル-->
<level value="ALL"/>
<appender-ref ref="rollingFile"/>
</root>

级别改成ALL
这是优先顺序FATAL < ERROR < WARN < INFO < DEBUG
你可以选择比ERROR大的 也就是说是FATAL システム停止するような致命的な……


就是这样 --------------------编程问答--------------------
引用 8 楼 wuhaiwuya 的回复:
引用 5 楼 chopper7278 的回复:
XML code
<root>
<!--アプリケーションログレベル-->
<level value="ALL"/>
<appender-ref ref="rollingFile"/>
</root>

级别改成ALL
这是优先顺序FATAL < ERROR < WARN < INFO < DEBUG
你可以选择比ERROR大的 ……


我在强调一下:
如果按照楼上说的它会把没有错误的sql文也打出来,但是我只想打出有错误的那条sql语句,其它的都不打出来 --------------------编程问答--------------------  巴 嘎
--------------------编程问答-------------------- 你可以根据不同的级别分别保存到指定文件中  error就打印到error.log中  debug就打印到debug.log中
分开来打印 --------------------编程问答-------------------- 看看.......  --------------------编程问答--------------------
引用 7 楼 fmsgx 的回复:
我现在想要的是只把当前有错误的sql文打出来,如果把级别设置为All的话还是把其它的sql文也打出来了。
但是如果把设置为error级别时,按照我现在的配置打不出来sql文
<root>
<!--アプリケーションログレベル-->
<level value="error"/>
<appender-ref ref="rollingFile"/>
</root>

请问如果把级别设置为error时,如何才能打出sql文,按照最上面所贴出的配置文件还需要改什么地方啊?
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,