davioooh davioooh - 2 months ago 13
C# Question

Log4NET AdoNetAppender connection string reference

I want to use Log4NET to log into my DB and following some tutorials I see that I have to configure a connection string for the DAO appender.

I already have a connection string in my web.config for DB connection so I'm wondering if I can reference that instead of setting a new one.

I usually change my connection string to switch from dev DB to production DB so it could be very useful to share the same connection parameters.

Answer Source

You can set the connection string at runtime using this class:

You invoke SetConnectionString with the connection string just after you've configured log4net.

However, there are a couple of things I would note:

Log4net database appenders don't like being created without a connection string, and throw an (internal) error - and during unit testing, I've seen tests take more than 10 seconds when given a fake connection string.

public static class LogConfigurator
{
   public static void SetConnectionString(string connectionString)
   {
        Hierarchy logHierarchy = log4net.LogManager.GetRepository() as Hierarchy;

        if (logHierarchy == null)
        {
            throw new InvalidOperationException
               ("Can't set connection string as hierarchy is null.");
        }

        var appender = logHierarchy.GetAppenders()
                                   .OfType<AdoNetAppender>()
                                   .SingleOrDefault();

        if (appender == null)
        {
            throw new InvalidOperationException
              ("Can't locate a database appender");
        }

        appender.ConnectionString = connectionString;
        appender.ActivateOptions();
   }
}