Saving log to Azure Storage using Log4net from MVC

348 views Asked by At

I have a MVC application which is a public site. I am using Log4net to store user's activity in Azure Storage.

I am storing contextual data in threadcontext and use this when message are logged into azure storage.

But for some reason it is taking the wrong values i.e some random values. I doubt that i am doing something wrong using this threadcontext.

Please find below my code snippet.

In my Mvc controller i am using

log4net.ThreadContext.Properties["CustomerID"] = username
log4net.ThreadContext.Properties["CreatedBy"] = createdbyusername

In custom Appender i am using as

var keys = log4net.ThreadContext.Properties.GetKeys();
CustomerID = keys.Contains("CustomerID") ? log4net.ThreadContext.Properties["CustomerID"].ToString() : loggingEvent.Identity,
CreatedBy = keys.Contains("CreatedBy") ? log4net.ThreadContext.Properties["CreatedBy"].ToString() : loggingEvent.Identity,

Can anyone tell me how to achieve this so that it takes the right value for each request?

My appender code:

protected void LogAudit(AuditEventType eventType, object additionalObject, string customerId = "")
{
    if (_logger != null)
    {
        if (!String.IsNullOrEmpty(customerId))
            log4net.ThreadContext.Properties["CustomerID"] = 
                customerId;

        AuthSSOProvider sso = new AuthSSOProvider();
        var helpDeskUser = sso.GetCookie(ConfigurationManager.AppSettings.Get("cookieKey"));
        if (helpDeskUser != null)
            log4net.ThreadContext.Properties["CreatedBy"] = 
                helpDeskUser;

        _logger.LogAudit(eventType, additionalObject);
    }
}
0

There are 0 answers