【问题标题】:Log4Net not calling the stored procedure using commandTypeLog4Net 未使用 commandType 调用存储过程
【发布时间】:2015-11-03 10:10:22
【问题描述】:

长话短说,我正在使用 Log4net,我想在数据库中写入调用存储过程。这是 web.config 中的设置:

<log4net debug="true">
<root>
  <level value="ALL" />
  <appender-ref ref="AdoNetAppender" />
  <appender-ref ref="RollingLogFileAppender" />
</root>
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
  <bufferSize value="1" />
  <threshold value="ALL"/>
  <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  <connectionString value="data source=***;initial catalog=***;user id=**;password=***;MultipleActiveResultSets=True;" />
  <commandText value="iE_AddUserActivityLog" />
  <commandType value="StoredProcedure" />
  <parameter>
    <parameterName value="@log_date" />
    <dbType value="DateTime" />
    <layout type="log4net.Layout.RawTimeStampLayout" />
  </parameter>
  <parameter>
    <parameterName value="@thread" />
    <dbType value="AnsiString" />
    <size value="255" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%thread" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@log_level" />
    <dbType value="AnsiString" />
    <size value="50" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%level" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@logger" />
    <dbType value="AnsiString" />
    <size value="255" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%logger" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@page" />
    <dbType value="AnsiString" />
    <size value="255" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%property{page}" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@host" />
    <dbType value="AnsiString" />
    <size value="50" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%property{host}" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@ipaddress" />
    <dbType value="AnsiString" />
    <size value="15" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%property{ipaddress}" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@browser" />
    <dbType value="AnsiString" />
    <size value="15" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%property{browser}" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@platform" />
    <dbType value="AnsiString" />
    <size value="15" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%property{platform}" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@device" />
    <dbType value="AnsiString" />
    <size value="15" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%property{device}" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@message" />
    <dbType value="AnsiString" />
    <size value="4000" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%message" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@exception" />
    <dbType value="AnsiString" />
    <size value="2000" />
    <layout type="log4net.Layout.ExceptionLayout" />
  </parameter>
</appender>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
  <file value="logs\log.txt" />
  <appendToFile value="true" />
  <rollingStyle value="Size" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="10MB" />
  <staticLogFileName value="true" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" />
  </layout>
</appender>
</log4net>

有人可以在这里帮助我理解为什么我不能使用 commandType 吗?因为如果我使用任何一个:

<commandText value="INSERT INTO user_activity_log ([Date],[Thread],[Level],[Logger],[page],[host],[browser],[platform],[device],[ipaddress],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @page, @host, @browser, @platform, @device, @ipaddress, @message, @exception)" />

或:

<commandText value="exec iE_AddUserActivityLog @log_date, @thread, @log_level, @logger, @page, @host, @browser, @platform, @device, @ipaddress, @message, @exception" />

我可以看到这是在写。

更新:我也尝试过以这种方式引入 DBO 前缀:

  <commandText value="dbo.iE_AddUserActivityLog" />
  <commandType value="StoredProcedure" />

【问题讨论】:

  • 嗨 stuartd,感谢您的回复。正如我所提到的,当我使用 exec iE_AddUserActivityLog @params... 时执行 SP,所以我排除了这种可能性。
  • 您是否尝试过使用log4net.Internal.Debug 查看是否出现任何数据库错误?
  • 谢谢@RhysJones。不,我还没有。但这可能会解决问题。
  • 在探查器处于活动状态时运行和/或检查 Sql Server 日志也​​可能有帮助

标签: sql-server stored-procedures sql-server-2012 web-config log4net


【解决方案1】:

好的,我能够解决它。但我不确定为什么。基本上,我需要重命名 web.config 中的一些参数,以便与我的存储过程中的相同名称匹配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 2015-03-14
    • 2011-12-11
    • 2017-10-02
    • 2014-08-07
    相关资源
    最近更新 更多