web-dev-qa-db-fra.com

Comment puis-je utiliser le connectionString du site actuel pour log4Net au lieu de configurer

J'utilise log4Net pour le journal de mon système. Le nœud connectionString est obligatoire si le type appender est AdoNetAppender dans Log4Net. Cependant, j'ai déjà une chaîne connectionString sur mon site Web où j'utilise Log4Net. 

Comment puis-je utiliser le connecteur du site Web pour log4Net au lieu de configurer à nouveau le même connecteur dans le fichier de configuration log4net?

27
Aiping He

C'est assez simple, il vous suffit de remplacer la configuration appender connectionString.

Au lieu de la chaîne de connexion:

<connectionString value="[Complete Connection]" />

Vous utilisez simplement la configuration connectionStringName:

<connectionStringName value="ApplicationConnection" />

Et puis vous avez votre chaîne de connexion d'application:

 <connectionStrings>
     <add name="ApplicationConnection" connectionString="Connection" providerName="System.Data.OracleClient" />
 </connectionStrings>

Malheureusement, vous devez avoir la connectionType avec le connectionStringName, exemple:

<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" />
...
37
gustavodidomenico

Vous pouvez mettre à jour ConnectionString de AdoNetAppender de manière dynamique, après avoir configuré log4net pour votre site Web, généralement dans le fichier Global.asax. Après votre appel à configurer le log4net en utilisant XmlConfigutor() ou quelque chose .. vous pouvez appeler la méthode ci-dessous qui vérifie tous les AdoNetAppenders et met à jour le connectionString requis.

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
           }
        }
    }
}
17
Narayan Akhade

Vous pouvez maintenant utiliser la propriété ConnectionStringName de AdoNetAppender pour qu'elle pointe vers une chaîne nommée connectionString dans votre application ou dans le fichier web.config:

Propriété AdoNetAppender.ConnectionStringName

7
David Sette

Pour ce faire, vous pouvez écrire un appender ADO.NET personnalisé et remplacer la chaîne de connexion:

public new string ConnectionString {
    get { 
        return base.ConnectionString; 
    }

    //you could set your own connection string here
    set { 
        base.ConnectionString = ConfigurationManager.ConnectionStrings ["Sql"].
            ConnectionString; 
    }
}

Vous pouvez visiter http://technico.qnownow.com/2012/03/12/how-to-write-custom-ado-net-appender-for-log4net/ pour un exemple complet

1
Veera

Cela devrait être possible dans la version 1.2.11. Voici le lien vers le problème:

https://issues.Apache.org/jira/browse/LOG4NET-88

0
Stefan Egli

Vous pouvez le faire en héritant de AdoNetAppender.

  • 1) Créez une classe qui hérite de AdoNetAppender.
  • 2) Créez ensuite une propriété ConnectionStringName qui définira la propriété Log4Net ConnectionString sur une chaîne de connexion extraite par le .Net ConfigurationManager.
  • 3) Créez une entrée ConnectionStringName dans la section AdoNetAppender de votre fichier de configuration, qui mappe à un connectionString existant dans la section connectionStrings de votre fichier de configuration.

Voir le blog "Ken Burkhardt" ci-dessous pour plus de détails.

http://kenny-bu.blogspot.com/2011/03/using-connection-string-name-with.html

0
Min Min