2010-12-27 3 views
0

ist es nicht möglich, Tags in der app.config umzubenennen?Wie Abschnitte in app.config umbenennen? Abschnittsname funktioniert nicht

Wenn ich die folgende

... 
<sectionGroup name="common"> 
    <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" /> 
</sectionGroup> 
... 
<common> 
    <logging> 
    <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net"> 
     <arg key="configType" value="INLINE" /> 
    </factoryAdapter> 
    </logging> 
</common> 
... 

alles wie erwartet funktioniert (Anmeldung mit Common Protokollierung erfolgt). Aber wenn ich die Abschnittsnamen ändern, wird die Konfiguration ignoriert, z. wenn ich die Gruppe common zu mycommon umbenenne.

<sectionGroup name="mycommon"> 
    <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" /> 
</sectionGroup> 
... 
<mycommon> 
    <logging> 
    <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net"> 
     <arg key="configType" value="INLINE" /> 
    </factoryAdapter> 
    </logging> 
</mycommon> 
... 

Wer kennt den Trick?

Antwort

1

Die Lösung im Code gefunden wurde selbst ...

public static class LogManager 
{ 
    /// <summary> 
    /// The name of the default configuration section to read settings from. 
    /// </summary> 
    /// <remarks> 
    /// You can always change the source of your configuration settings by setting another <see cref="IConfigurationReader"/> instance 
    /// on <see cref="ConfigurationReader"/>. 
    /// </remarks> 
    public static readonly string COMMON_LOGGING_SECTION = "common/logging"; 

    private static IConfigurationReader _configurationReader; 

Sie also eine neue Klasse der IConfigurationReader Schnittstelle Implementierung erstellen, erweitern/austauschen LogManager (oder die Zeichenfolge ersetzen, aber dies erfordert gemeinsame recompiling .Logging).

Danke für den gut kommentierten Code von Common.Logging ... Ich habe es nach dem Debuggen.

+0

Ich brauchte einen halben Tag, um endlich zu verstehen, dass das das Problem war ... Ich habe die Sektionsgruppe entfernt und plötzlich gab es überhaupt kein Logging mehr. Also vielen Dank! – Speuline

1

Vielleicht ist der XML-Pfad in log4net verdrahtet, versuchen Sie sie zu fragen.

+0

Ich denke, das sollte von einem separaten Handler und nicht im Code verdrahtet werden, aber ich werde einen Blick auf Common.Logging werfen (die als Wrapper fungiert log4net nichts über die Common/Logging-Abschnitt). – Beachwalker

+0

Übrigens scheint es, dass auch andere Section-Handler nicht umbenannt werden können (z. B. Spring). Aber ich habe gesehen, Tutorials über benutzerdefinierte Handler und das Tag wurden vom Entwickler mit der lib (wie es sein sollte) gewählt. In anderen Fällen würde es ein Problem geben, wenn zwei Bibliotheken die gleichen Abschnittsnamen für ihre Konfiguration verwenden. – Beachwalker

+0

Ich hatte einen (schnellen) Blick und es ist wie erwartet implementiert ... das erste verdrahtete Element ist der FactoryAdapter, also gibt es keine fest codierte Common/Logging-Abhängigkeit. Ihre Antwort scheint also keine Lösung zu sein. Aber danke trotzdem. Irgendwelche anderen Ideen? – Beachwalker

Verwandte Themen