Как я могу использовать connectionString текущего сайта для log4Net вместо настройки
Я использую log4Net для своего системного журнала. ConnectionString node является обязательным, если тип приложения - AdoNetAppender в Log4Net. Тем не менее, у меня уже есть connectionString на моем сайте, где я использую Log4Net.
Как я могу использовать connStr сайта для log4Net вместо того, чтобы снова настроить тот же самый connstr в файле конфигурации log4net?
Ответы
Ответ 1
Это довольно просто, вам просто нужно заменить конфигурацию appender connectionString
.
Вместо строки подключения:
<connectionString value="[Complete Connection]" />
Вы просто используете конфигурацию connectionStringName
:
<connectionStringName value="ApplicationConnection" />
И затем у вас есть строка подключения к вашему приложению:
<connectionStrings>
<add name="ApplicationConnection" connectionString="Connection" providerName="System.Data.OracleClient" />
</connectionStrings>
К сожалению, вы должны иметь connectionType
с именем connectionStringName, например:
<appender name="AdoNetAppender_Oracle" type="log4net.Appender.AdoNetAppender">
<connectionType value="System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionStringName value="ApplicationConnection" />
...
Ответ 2
Вы можете динамически обновлять ConnectionString из AdoNetAppender, после того, как вы настроили log4net для своего сайта, как правило, в Global.asax. После вашего вызова для настройки log4net с помощью XmlConfigutor()
или что-то еще.. вы можете вызвать метод ниже, который проверяет все AdoNetAppenders и обновляет требуемую connectionString.
private static void ConfigureLog4Net()
{
Hierarchy hierarchy = LogManager.GetRepository() as Hierarchy;
if(hierarchy != null && hierarchy.Configured)
{
foreach(IAppender appender in hierarchy.GetAppenders())
{
if(appender is AdoNetAppender)
{
var adoNetAppender = (AdoNetAppender)appender;
adoNetAppender.ConnectionString = ConfigurationManager.AppSettings["YOURCONNECTIONSTRINGKEY"].ToString();
adoNetAppender.ActivateOptions(); //Refresh AdoNetAppenders Settings
}
}
}
}
Ответ 3
Теперь вы можете использовать свойство ConnectionStringName для AdoNetAppender, указывая его на имя namedString в вашем приложении или файле web.config:
Свойство AdoNetAppender.ConnectionStringName
Ответ 4
Вы можете сделать это, написав пользовательский ADO.NET-приложение и переопределив строку подключения:
public new string ConnectionString {
get {
return base.ConnectionString;
}
//you could set your own connection string here
set {
base.ConnectionString = ConfigurationManager.ConnectionStrings ["Sql"].
ConnectionString;
}
}
Вы можете посетить http://technico.qnownow.com/2012/03/12/how-to-write-custom-ado-net-appender-for-log4net/ для полного примера
Ответ 5
Вы можете сделать это, наследуя AdoNetAppender.
- 1) Создайте класс, который наследуется от AdoNetAppender.
- 2) Затем создайте свойство ConnectionStringName, которое установит свойство Log4Net ConnectionString в строку соединения, которая извлекается .NET ConfigurationManager.
- 3) Создайте запись ConnectionStringName в разделе AdoNetAppender вашего конфигурационного файла, который сопоставляется с существующей connectionString в разделе connectionStrings вашего файла конфигурации.
Подробнее см. ниже в блоге "Ken Burkhardt".
http://kenny-bu.blogspot.com/2011/03/using-connection-string-name-with.html
Ответ 6
Это должно быть возможно в версии 1.2.11. Вот ссылка на вопрос:
https://issues.apache.org/jira/browse/LOG4NET-88