web-dev-qa-db-fra.com

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

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>
42
MrSharps

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 le configurateur 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 = ...   }
    }
}
32
Michael Petrotta

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é à partir du 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é.

46
10p

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

5
Stefan Egli

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

4
Aiping He

À partir de 2017 (log4net 2.0.8.0), les éléments suivants fonctionnent:

public class MyAdoNetAppender : AdoNetAppender
{
    public MyAdoNetAppender()
    {
        ConnectionString = ...
    }
}


<appender name="AdoNetAppender" type="MyApp.MyAdoNetAppender">

(Très semblable à la réponse de @Michael Petrotta)

0
turdus-merula