44 votes

Pouvez-vous extraire la chaîne connectionString pour un AdoNetAppender log4net dans un fichier web.config?

Salut à tous. Ceci est ma première question StackOverflow.

J'ai déjà une chaîne de connexion à la base de données dans mon fichier web.config. J'ai scanné les documents log4net, mais je n'arrive pas à trouver un moyen de l'utiliser dans la section log4net de mon fichier web.config. Est-il possible de faire quelque chose comme ça?

 <connectionStrings>
    <add name="connStr" connectionString="Data Source=localhost; ..." />
</connectionStrings>

<log4net>
    <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
    <connectionString connectionStringName="connStr"/>
      ...
</log4net>
 

Merci!

50voto

10p Points 1875

Il est possible d'utiliser une chaîne de connexion à la base de données spécifiée dans web.config sans créer de nouvelle classe, bien que vous deviez utiliser la version de log4net qui n'a pas encore été publiée. Il peut être téléchargé depuis le référentiel SVN http://svn.apache.org/viewvc/logging/log4net/trunk/.

Votre configuration ressemblera à ceci:

 <connectionStrings>
    <add name="connStr" connectionString="Data Source=localhost; ..." />
</connectionStrings>

<log4net>
    <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
    <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    <connectionStringName value="connStr" />
      ...
</log4net>
 

Veuillez noter que connectionType doit encore être spécifié.

32voto

Michael Petrotta Points 35647

Créez une classe qui étend AdoNetAppender - disons WebAppAdoNetAppender . Implémentez la propriété ConnectionString dans cette classe et récupérez la chaîne de connexion à partir de votre fichier web.config dans cet ensemble de propriétés.

 <log4net>
    <appender name="AdoNetAppender" type="MyApp.WebAppAdoNetAppender">
    ...
 

...

 public class WebAppAdoNetAppender : log4net.Appender.AdoNetAppender
{
    public new string ConnectionString
    {
        get { return base.ConnectionString; }
        set { base.ConnectionString = ...   }
    }
}
 

5voto

Stefan Egli Points 11708

fyi ceci sera implémenté dans 1.2.11 selon cela . Cependant, je ne sais pas quand ils vont le publier.

5voto

Aiping He Points 101

les réponses surtout ne fonctionnent pas. J'ai eu une autre solution pour cela, j'ai essayé et cela a fonctionné:


 

    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
           }
        }
    }
    }

 

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X