0

Long story short, I'm using Log4net and I want to write inside into the DB calling a Stored Procedure. Here is the setting in the 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>

Can someone help me here to understand why I cannot use the commandType? Because if I use either:

<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)" />

or:

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

I can see that is writing.

UPDATE: I've also tried to introduce the DBO prefix, in this way:

  <commandText value="dbo.iE_AddUserActivityLog" />
  <commandType value="StoredProcedure" />
Stefano Magistri
  • 1,130
  • 1
  • 11
  • 18
  • Hi stuartd, thanks for your reply. As I have mentioned, the SP is executed when I use exec iE_AddUserActivityLog @params..., so I'm excluding this possibility. – Stefano Magistri Nov 03 '15 at 11:25
  • 1
    Have you tried using [log4net.Internal.Debug](http://stackoverflow.com/questions/756125/how-to-track-down-log4net-problems) to see if any DB errors are occurring? – Rhys Jones Nov 03 '15 at 11:33
  • Thanks @RhysJones. No, I haven't yet. But this might solve the issue. – Stefano Magistri Nov 03 '15 at 11:48
  • 1
    Running with the profiler active and/or examining the Sql Server logs may also help – stuartd Nov 03 '15 at 12:15

1 Answers1

0

Ok, I was to able to solve it. But I'm not sure why. Basically, I needed to rename the some parameters in the web.config, in order to match with the same name that I have in my Stored Procedure.

Stefano Magistri
  • 1,130
  • 1
  • 11
  • 18