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?