Log4net doesn't set the URI in some requests

Viewed 106

I using log4net in one Asp.Net MVC project.

public class ValuesController : ApiController
{
    private readonly ILog _log = LogManager.GetLogger(nameof(ValuesController));
    public async Task<IHttpActionResult> Get()
    {
        var beforeConfigureAwaitFalse = HttpContext.Current.Request.Url.AbsoluteUri;

        _log.Info("beforeConfigureAwaitFalse");

        await DoSomething().ConfigureAwait(false);

        var afterConfigureAwaitFalse = HttpContext.Current?.Request?.Url?.AbsoluteUri ?? "null";

        _log.Info("afterConfigureAwaitFalse");

        return Json(new
        {
            beforeConfigureAwaitFalse,
            afterConfigureAwaitFalse
        });
    }

    private async Task DoSomething()
    {
        await Task.Delay(1000);
    }
}

this is my log4net configuration

<log4net debug="true">
  <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender, log4net">
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <encoding value="utf-8" />
    <file value="D:\\Logss\\" />
    <datePattern value="yyyyMMdd-HH" />
    <staticLogFileName value="false" />
    <appendToFile value="true" />
    <rollingStyle value="Date" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="2GB" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%-20date %-5level %-15logger [ %aspnet-request{URL} ] - %message%newline" />
    </layout>
  </appender>
  <root>
      <level value="All" />  
      <appender-ref ref="RollingLogFileAppender" />
    </root>
</log4net>

Sometimes in logs (maybe always), URI is NOT AVAILABLE for %aspnet-request{URL} and does not show the log is registered for which API after ConfigureAwait(false).

Registred log:

2022-02-07 13:42:00,539 INFO  ValuesController [ /api/values ] - beforeConfigureAwaitFalse
2022-02-07 13:42:01,568 INFO  ValuesController [ NOT AVAILABLE ] - afterConfigureAwaitFalse

In the async methods, this happens.

Note: i use .ConfigureAwait(false); when call an async method and i can't remove .ConfigureAwait(false);.

What should I do to write URI in logs?

0 Answers
Related