Basic NLog Ziel-Datei funktioniert nicht unter IIS 8 und Windows Server 2012
Ich kann einfach nicht NLog arbeiten zuverlässig unter Windows Server 2012-IIS 8. Dies ist ein Azure Virtual Maschine (nicht eine webrole), so dass die Dinge gewesen sein sollte ziemlich einfach. Ursprünglich hatte ich acync Wrapper, Datenbank-basierte Ziele, usw. Aber ich ausgezogen habe alles bis auf das absolute Minimum und können nicht scheinen, damit es funktioniert!
Dies ist mein NLog.config-Datei:
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>
<targets>
<target xsi:type="File"
name="nsec"
fileName="${basedir}app_data/logs/nsec_${shortdate}.log"
createDirs="true"
layout="${longdate}|${level:uppercase=true}|${logger}|${aspnet-user-identity}|${message}"
/>
</targets>
<rules>
<logger name="NSec" minlevel="Trace" writeTo="nsec"/>
</rules>
</nlog>
Wie Sie sehen können, es gibt nichts besonderes hier. Die Ziel-Datei geschrieben haben soll, um die ./App_Data/Logs-Verzeichnis, aber die meisten der Zeit, es wurde nichts geschrieben es. Manchmal was geschrieben wird an die Datei... Und das ist am meisten ärgerlich ist Teil des ganzen!
Lokal unter beiden Cassini und IIS Express die Protokolle perfekt funktionieren.
Gibt es alles, was ich brauche, um zu meinem web.config für NLog zu arbeiten? Ich bin auch nicht mit der ASP.NET wrapper!
Kennt jemand eine Inkompatibilität zwischen NLog und IIS8?
UPDATE
Ich habe Process Monitor auf dem server und erkannte nicht einmal einen einzigen Versuch gemacht wird, zu schreiben, zu Lesen, oder die Abfrage der log-Datei. Es sieht aus, als wenn NLog wurde ganz und gar ignoriert. Ich weiß, der NLog.config-Datei gelesen wird beim Start, weil wenn ich eine ungültige Konfiguration bekomme ich eine Fehlermeldung beim Zugriff auf meine Anwendung, so NLog ist das Parsen der Datei. Das problem ist, dass, obwohl es wird analysiert, und manchmal etwas bekommt angemeldet, die meiste Zeit passiert NICHTS, und, wie bestätigt, durch die Verwendung von Process Monitor, nicht einen einzigen Versuch gemacht wird, um den Zugriff/erstellen/schreiben der log-Datei.
Die Ironie ist, dass sich auf Process Monitor konnte ich sehen, die anderen IIS-Anwendungen schreiben, um Ihre eigenen NLog-Dateien ohne Probleme. Es ist nur diese bestimmte Anwendung, die sich nicht melden, aber nur in der Produktion Maschine!
- Wie zum ausführen von " Process Monitor auf den server und sehen, ob es irgendwelche Berechtigungen fehlen, auf den Ziel-Ordner?
- Hallo Uwe, dies ist ein Produktions-server.. ich will nicht führen Sie Process Monitor, gibt es... Aber ich kann versichern, dass der IIS-App-Domain die Rechte auf alle Ordner, wie es läuft mit einem bestimmten Benutzer-Identität. Wenn ich nicht bekommen kann es arbeiten, ich werde versuchen, duplizieren Sie die Virtuelle Maschine aus, und verwenden Sie Prozess-Monitor da, aber Azure macht es nicht einfach zu duplizieren VMs, in der Tat ist es, die meisten der Zeit, härter als das installieren von stratch!
- Uwe, ich habe Process Monitor und es gibt nicht einmal einen einzigen Versuch zum schreiben der log-Datei!!! Es sieht aus, als wenn NLog wurde ganz und gar ignoriert. Ich aktualisiere die Frage...
- Wie etwa die Protokollierung auf verschiedenen, nicht-Datei-basiertem Protokoll-Ziele (wie Ereignisprotokoll, oder ASP.NET Trace) innerhalb NLog, um zu sehen, ob es eine Datei-Ausgabe?
- Ich hatte eine Datenbank-Ziel-Setups, aber die Anmeldung war so unberechenbar wie mit der Datei Ziel... ich werde es ändern der APP-POOL auf einen anderen, in denen es eine Anwendung, dass die Protokollierung ordnungsgemäß...
- Ich fange an zu zweifeln, es ist eine NLog-problem. Die NSec-logger ist mit einem benutzerdefinierten HttpModule aufrufen, und ich glaube, dass es einfach NICHT unter IIS8, so dass das Protokoll eigentlich nie passiert! Nun, warum diese HttpModule läuft unter IIS 6, 7, Express und Cassini-aber nicht IIS8... ich denke, ich werde haben, zu schließen, diese Frage.
- Ich hoffe, ich konnte Euch zumindest etwas helfen 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe gerade entdeckt, mit der Hilfe von Uwe Kein, die mir vorgeschlagen, um die Verwendung von Process Monitor, um zu sehen, ob gab es keine Probleme mit Berechtigungen, in der Tat, die log-Datei war noch NIE zugegriffen. Dies begann mich zu Fragen, warum... Und ich erkannte, dass die HttpModule, das war die Quelle des NSec-logger wurde nicht ausgeführt, also, in der Tat, kein Protokoll wurde tatsächlich gemacht werden.
Dieses problem ist aufgetreten, weil das web.config auf der Ziel-Maschine war nicht erfolgreich aktualisiert in früheren Bereitstellungen, so das HttpModule so konfiguriert wurde, dass der IIS6 Weg... ich hatte auf hinzufügen, um den Abschnitt "Module" wie in gezeigt: https://stackoverflow.com/a/2935410/285678
Was ist toll daran war, dass ich nur noch diese log, um zu versuchen, den Grund zu finden, warum diese HttpModule war nicht verhält wie erwartet, so finden Sie heraus, warum NLog war "nicht funktioniert" hat dieses Problem behoben (das war ein sehr ernstes Problem, wie das HttpModule bezogen sich auf das Sicherheitssystem der Anwendung!)
Habe ich versucht, die Frage schließen, da es irreführend ist, da es nicht eine NLog Fehler überhaupt, aber es muss 50 Stimmen geschlossen sein! So werde ich es verlassen, als Warnung für Leute wie mich, die in Ihrer Verzweiflung bitten, "nicht sehr klug" - Fragen bei StackOverflow 🙁
Hatte ich ein leeres Nlog config-Abschnitt in der web.config-Datei, und das machte es nicht Aussehen für die nlog.config-Datei. Einmal habe ich gelöscht, meine Protokollierung zu arbeiten begonnen.