Log4NET AdoNetAppender connection string reference

∥☆過路亽.° 提交于 2019-12-29 08:51:34

问题


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.


回答1:


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();
   }
}


来源:https://stackoverflow.com/questions/13509988/log4net-adonetappender-connection-string-reference

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!