genannt wird, verstehe ich, dass thisquestionhasbeenaskedseveraltimes, aber leider habe ich arbeitet nicht in der Lage gewesen zu meiner Protokollkonfiguration zu erhalten. Ich muss irgendwo einen kleinen Fehler machen.log4net funktioniert nur, wenn XmlConfigurator.Configure()
Ich habe eine .NET 4.5 MVC 4/EF 5 Webanwendung und ich versuche, Protokollierung zu arbeiten. Die Lösung enthält zwei Projekte, eines für die DAO- und Modellobjekte und eines für die Website. Die App.Config Datei sieht wie folgt aus:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false" />
</configSections>
<connectionStrings>
<add name="RebuildingTogetherEntities" connectionString="stuff..."/>
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
</entityFramework>
<log4net configSource="Log.config" />
</configuration>
Das gleiche log4net Abschnitt wurde auch in die Web.Config-Datei kopiert worden ist.
Ich habe folgendes auf beide AssemblyInfo.cs Dateien:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log.config", Watch = true)]
"Copy To Output Directory" wird für beide Log.Config Dateien auf true.
Die einzige Möglichkeit, dass ich Protokollierung zum Anhängen an die Ausgabedatei scheinen kann, ist XmlConfigurator.Configure() aufrufen, bevor die erste Protokollierungsanweisung ausgeführt wird. Ich denke, ich kann eine Fassade schreiben, um das zu tun, wenn ich den Logger zum ersten Mal erhalte, aber das fühlt sich einfach falsch an.
Wie kann ich den Logger initialisieren, ohne den XmlConfigurator manuell aufzurufen?
http Does: // stackoverflow.com/questions/3971250/log4net-configuration-from-assembly-attribute-does-not-load-configuration-file anwenden? – sgmoore
Es scheint nicht ... in diesem Fall gab es eine Nachricht von log4net vor dem Herunterfahren der Anwendung, aber ich sehe diese Nachricht in meinem Fall nicht. Danke für den Vorschlag. – Brad
Ich bin mir nicht sicher, ob ich deiner Logik zustimme. Sie werden die log4net-Nachricht nur sehen, wenn die interne Protokollierung aktiviert ist und wenn Ihr System Ihre log.config nicht liest, ist es wahrscheinlich nicht aktiv. Der wichtige Punkt ist, dass, wenn Sie etwas wie GetLogger (...) tun, das System im Prinzip etwas Ähnliches wie Attribute.GetCustomAttributes (Assembly.GetCallingAssembly(), typeof (log4net.Config.ConfiguratorAttribute), false) tun wird. Wenn Sie also nicht sehr früh beim Start der Anwendung protokollieren, wird Ihre erste Protokollierung möglicherweise von einer Assembly initialisiert, die das benutzerdefinierte Attribut nicht weiter ausführt. – sgmoore