1

I want to log Client IP Address, Browser Name and Windows Authenticated User Name using log4net library.

I'm trying in this way, but its not working.

So Please help me out.

Main issue is I don't know how to add multiple custom properties in log4net.

Please help me.

Server Side Code.

log4net.GlobalContext.Properties["Hostname"] = GetIP();
            log4net.GlobalContext.Properties["Browser"] =  HttpContext.Current.Request.Browser.Type;
            log4net.GlobalContext.Properties["username"] = HttpContext.Current.Request.LogonUserIdentity.Name;

Web.Config Setting:

<conversionPattern value="%date %property{Hostname, username, Browser} [%thread]&#xD;&#xA;          %-5level %logger - %message%newline"
                                           />

If any other setting is required, Please let me know.

Or is there any other way to do this, Please let me know.

user3729645
  • 147
  • 3
  • 9
  • I think you should use the ThreadContext instead of the GlobalContext to avoid one thread from overwriting the values of another and as a result logging incorrect information. – Marquez May 28 '19 at 18:16

2 Answers2

1

To give you a more 'elegant' solution for this: use ndc.

<conversionPattern value="%-4timestamp [%thread] %-5level %logger %ndc - %message%newline" />

using Nested diagnostic context in code (NDC):

using(log4net.NDC.Push("["+GetIP() + " - " + HttpContext.Current.Request.Browser.Type + " - " + HttpContext.Current.Request.LogonUserIdentity.Name+"]")
{
    //your code
    //all log messages will contain the ndc string with the using.
}
Peter
  • 27,590
  • 8
  • 64
  • 84
0

It can be done in this way, Its useful for others.

<conversionPattern value="%date [%property{Hostname}] [%property{UserName}] [%property{Browser}] [%property{WindowsLogin}] [%thread]&#xD;&#xA;          %-5level %logger - %message%newline"
                                           />
user3729645
  • 147
  • 3
  • 9