log4Net EventlogAppender funktioniert nicht Asp.Net 2.0-WebSite?
Habe ich konfiguriert log4Net EventLogAppender für Asp.Net 2.0. Allerdings meldet es sich nicht, nichts. Ich habe folgende in meinem Web.Config.
<log4net>
<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
<param name="LogName" value="Test Log" />
<param name="ApplicationName" value="Test-Web" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<root>
<priority value="ERROR"/>
<appender-ref ref="EventLogAppender"/>
</root>
<logger name="NHibernate">
<level value="ERROR" />
<appender-ref ref="EventLogAppender" />
</logger>
</log4net>
Ich habe bereits ein Test-Log Ereignis-Log erstellt und AspNet-Benutzer die Erlaubnis hat, auf das Ereignisprotokoll registry-Eintrag. Ich habe auch log4Net Konfiguration in Global.asax Application_Start.
log4net.Config.XmlConfigurator.Configure();
Update : ich wechselte auf die log4net interne debugging-und fand die folgende Fehlermeldung in der trace.
log4net:ERROR XmlHierarchyConfigurator: Could not create Appender [EventLogAppender] of type [log4net.Appender.EventLogAppender]. Reported error follows.
System.Security.SecurityException: The source was not found, but some or all event logs could not be searched. Inaccessible logs: Security.
at System.Diagnostics.EventLog.FindSourceRegistration(String source, String machineName, Boolean readOnly)
at System.Diagnostics.EventLog.SourceExists(String source, String machineName)
at System.Diagnostics.EventLog.SourceExists(String source)
at log4net.Appender.EventLogAppender.ActivateOptions()
at log4net.Repository.Hierarchy.XmlHierarchyConfigurator.ParseAppender(XmlElement appenderElement)
Update 2 : Es funktioniert endlich, wenn ich die Quelle (Test-Web) die Nutzung einer Konsole-basierte Anwendung, die in c# und dann mit der Web-Anwendung.
- Haben Sie versucht, drehen auf log4net interne debugging? Vielleicht ist es wirft einen Fehler, dass Sie normalerweise nicht sehen: logging.apache.org/log4net/release/faq.html
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann ich Ihnen nicht genau sagen, was falsch sein könnte, aber wenn Sie hier gehen, werden Sie sehen, "Wie aktiviere ich log4net interne debugging?" Weg nach unten an der Unterseite. Log4net wird nicht werfen Ausnahmen, wenn etwas falsch ist, so müssen Sie es aktivieren, interne debugging um Informationen von log4net.
http://logging.apache.org/log4net/release/faq.html
Edit: siehe Auch die Frage direkt nach, dass einer, der erklärt, Potenzial Hänger mit dem EventLogAppender.
Gibt es einige sehr einfache Schritte, um Log4Net-arbeiten mit dem Ereignis-Protokoll mit ASP.NET.
Ihre Optionen sind:
Ändern Sie die app-pool
Dem der Anwendungspool ausgeführt LocalSystem
Oder...setzen Sie den Namen einer Anwendung, fügen Sie einen Registrierungsschlüssel
Konfigurieren Sie Ihre config-Datei zuerst so gibt es eine Anwendung namens.
Dies ist wichtig, wenn Sie ein Berechtigungen-Problem, denn wenn Sie peer an der Quelle sehen Sie die EventLogAppender standardmäßig der name der Anwendung (die Spalte "Quelle" in das event-log) auf:
Dies erfordert Ihre Anwendung einen Registrierungsschlüssel erstellen jedes mal, wenn der name geändert wird, und ist ein bisschen unordentlich. Also die beste Lösung ist, um Ihre Anwendung name. Hier ist ein Beispiel EventLogAppender Abschnitt, sendet jeder Ebene Fehler, die ApplicationName-Linie ist der wichtige Teil:
Bevor diese änderung die folgenden Schritte aus:
Einen Registrierungsschlüssel erstellen,
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application\MY-AWESOME-APP
Erstellen Sie einen string-Wert in diesem
Name es
EventMessageFile
, setzen Sie den Wert aufDieser Weg scheint zu funktionieren in beide 64-bit und 32-bit-Umgebungen.
Mit dieser Technik, die Sie nicht benötigen, um die Berechtigungen in der registry, und wenn der Schlüssel einmal oben ist, sollte nur funktionieren.
Ich würde vermuten, code access security verhindert, dass Sie Zugriff auf das Ereignisprotokoll. Dieser Artikel haben Informationen über das Thema. Im Grunde, wenn Ihr ASP.Net die Anwendung läuft unter medium trust die app keinen Zugriff auf die Ereignisprotokolle.
Hinweis: dies ist keine Einschränkung, gebaut in log4net per se, es ist ein "feature" ist .Net Framework und ASP.Net.