Log4NET AdoNetAppender connection string reference

后端 未结 1 413
清酒与你
清酒与你 2020-12-21 02:49

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 connec

相关标签:
1条回答
  • 2020-12-21 03:32

    Edit: since this was posted, log4net now supports specifying the connection string name in the config. From https://issues.apache.org/jira/browse/LOG4NET-88 -

    This adds a new "connectionStringName" attribute (and corresponding ConnectionStringName) property to the AdoNetAppender class. This is a reference to a connection string within the <ConnectionStrings> section of an App.config or Web.config file.

    There's an example in this answer.

    If you don't have the connection string defined in the <ConnectionStrings> section then 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();
       }
    }
    
    0 讨论(0)
提交回复
热议问题