Skip to content

requests hanging on aspnet webapplication #35

Description

@mapperr

Hi everyone,

we have a problem on our aspnet webapplication, in which we use mongodb only from the log4net mongodb appender.

if our instance of mongodb goes down (for whatever cause), the requests to our webapplication start to hang. if the mongodb instance goes up again, then the pending requests are fullfilled.

It's like the logging elaboration is on the request's thread, so if the appender cannot communicate with the mongodb instance, then the entire request waits (until a network timeout occurs).

Is that hypotesis correct?
If that's the case we would like to ask if it's possible to make the appender sort of "non-blocking": if there are problems with mongodb communication, the requests continue to be fullfilled.

That's the appender configuration from our web.config:

<configuration>

  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,  log4net"/>
  </configSections>

  <log4net>

    <appender name="SessionAppender" type="Log4Mongo.MongoDBAppender, Log4Mongo">
      <connectionString value="mongodb://username:password@host/DatabaseName" />
      <collectionName value="Session" />

      <field>
        <name value="App" />
        <layout type="log4net.Layout.PatternLayout" value="%property{App}" />
      </field>

      <!-- ... other fields ... -->


      <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin value="SESSION" />
        <levelMax value="SESSION" />
      </filter>
    </appender>

    <appender name="AuditAppender" type="Log4Mongo.MongoDBAppender, Log4Mongo">
      <connectionString value="mongodb://username:password@host/DatabaseName" />
      <collectionName value="Audit" />

      <field>
        <name value="App" />
        <layout type="log4net.Layout.PatternLayout" value="%property{App}" />
      </field>

      <!-- ... other fields ... -->

      <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin value="REQUEST" />
        <levelMax value="RESPONSE" />
      </filter>
    </appender>

    <appender name="TraceAppender" type="Log4Mongo.MongoDBAppender, Log4Mongo">
      <connectionString value="mongodb://username:password@host/DatabaseName" />
      <collectionName value="Trace" />

      <field>
        <name value="App" />
        <layout type="log4net.Layout.PatternLayout" value="%property{App}" />
      </field>

      <!-- ... other fields ... -->

      <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin value="DEBUG" />
      </filter>
    </appender>

  <appender name="SessionForwardingAppender"
        type="log4net.Appender.BufferingForwardingAppender">
    <bufferSize value="100"/>
    <appender-ref ref="SessionAppender" /> <!-- already defined -->
  </appender> 
  <appender name="AuditForwardingAppender"
        type="log4net.Appender.BufferingForwardingAppender">
    <bufferSize value="100"/>
    <appender-ref ref="AuditAppender" /> <!-- already defined -->
  </appender> 
  <appender name="TraceForwardingAppender"
        type="log4net.Appender.BufferingForwardingAppender">
    <bufferSize value="100"/>
    <appender-ref ref="TraceAppender" /> <!-- already defined -->
  </appender> 



    <level>
      <name value="SESSION" />
      <value value="1" />
    </level>
    <level>
      <name value="REQUEST" />
      <value value="2" />
    </level>
    <level>
      <name value="RESPONSE" />
      <value value="3" />
    </level>

    <level>
      <name value="SQL" />
      <value value="50000" />
    </level>

    <root>
      <level value="ALL" />
      <appender-ref ref="SessionForwardingAppender" />
      <appender-ref ref="AuditForwardingAppender" />
      <appender-ref ref="TraceForwardingAppender" />
    </root>
  </log4net>
</configuration>

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions