2010-03-14 3 views
41

Ich habe bereits eine DB-Verbindung Zeichenfolge in meiner web.config-Datei. Ich habe die log4net-Dokumente gescannt, finde aber keine Möglichkeit, sie im log4net-Abschnitt meiner web.config-Datei zu verwenden. Ist es möglich, so etwas zu tun?Können Sie die Connectionstring für einen log4net AdoNetAppender von anderswo in einer web.config-Datei ziehen?

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

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

Antwort

32

Erstellen Sie eine Klasse, die AdoNetAppender erweitert - sagen, WebAppAdoNetAppender. Implementieren Sie die ConnectionString -Eigenschaft in dieser Klasse und rufen Sie die Verbindungszeichenfolge aus der Datei web.config in diesem Eigenschaftensetter ab.

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

...

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

Stefan Egli Link zeigt an, dass ein Parameter noch nicht existiert. Dies scheint vorerst der beste Weg zu sein. Danke Herr Petrotta! – MrSharps

+0

Wie und wo würde ich diese Klasse laden/aufrufen/verwenden? Ich beginne gerade mit log4net und finde die Dokumentation ein wenig spärlich. Ich führe das in einem Quartz.NET-Job aus, der den Logger für mich instanziiert. Wie würde ich den Standardlogger durch meine eigene Unterklasse ersetzen? Vielen Dank. – InteXX

5

FYI wird dies in 1.2.11 nach this umgesetzt werden. Aber ich habe keine Ahnung, wann sie es veröffentlichen werden.

+0

klingt wie das Feature möchte ich bevorsteht – MrSharps

+2

1.2.11 endlich veröffentlicht wird ... –

46

Es ist möglich, eine DB-Verbindungszeichenfolge in web.config angegeben zu verwenden, ohne eine neue Klasse zu erstellen, wenn Sie log4net Build verwenden müssen, wäre das noch nicht freigegeben wurde. Es kann aus dem SVN-Repository http://svn.apache.org/viewvc/logging/log4net/trunk/

Ihre Konfiguration wie folgt aussehen wird heruntergeladen werden:

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

Bitte beachten Sie, dass connectionType noch festgelegt werden muss.

+15

Dies ist in der neuesten Version jetzt verfügbar, 1.2.11. Funktioniert gut. – dove

4

die Antworten vor allem funktionieren nicht. Ich habe eine andere Lösung für dieses, habe ich versucht, und es hat funktioniert:

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

How i can use the connectionString of the current website for log4Net instead of configuring

+0

Ich konnte auch nicht den Code oben arbeiten * und dies tat *. obwohl Für mich musste ich sicherstellen, dass eine leere Connectionstring in der Config haben:

0

Ab 2017 (log4net 2.0.8.0), die folgenden Werke:

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


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

(Sehr ähnlich @ Michael Petrotta Antwort)

Verwandte Themen