2014-10-26 9 views
10

Ich verwende Serilog innerhalb eines TopShelf-Dienstes, Protokollierung auf der Konsole und eine Rolling-Datei. Wenn der Dienst in einer Konsole ausgeführt wird, werden meine Nachrichten in die Protokolldatei geschrieben, aber wenn ich den Dienst installiere und ihn ausführe, erfolgt keine Protokollierung. Gibt es etwas Besonderes, das ich konfigurieren muss? Die Datei wird in den Binärdateien-Ordner unter ". \ Logs \ log- {date} .txt" geschrieben.Serilog in Windows-Dienst nicht in die Protokolldatei schreiben

Mit freundlichen Grüßen Gope

+0

ich gerade das gleiche Problem haben, haben Sie eine Chance haben, Lösung zu finden? – Mike

Antwort

2

Es ist sehr wahrscheinlich, dass das Konto, unter dem die Dienste ausgeführt werden Berechtigungen für die Protokolldatei zu schreiben, fehlt. Versuchen Sie, den Speicherort der Protokolldatei in den temporären Ordner des Systems zu ändern, um festzustellen, ob dies der Fall ist.

Wenn dies immer noch fehlschlägt, ist es am besten, Serilogs zu verwenden, um Ausnahmeinformationen zu erhalten.

+0

Hallo Nicholas, danke für Ihre Antwort. Der Dienst läuft als LocalSytem und hat die vollen Rechte für das Verzeichnis (exkl. Sonderrechte). Ich verwende Log4Net gerade, weil es in der Konsole UND innerhalb des Dienstes funktioniert. Sobald ich die Logging-Klasse in SeriLog ändere, schreibt es nicht mehr oder erstellt sogar die Logdatei, wenn es als Dienst ausgeführt wird. Immer noch im Konsolenmodus funktioniert es ... o_o Ich werde versuchen, SelfLog zu überprüfen, danke für diesen Tipp! – Gope

+3

Ich habe festgestellt, dass wenn mein Dienst hier loggt: '' dass es in 'C: \ Windows endet \ SysWOW64', das augenscheinlich das aktuelle Verzeichnis ist, wenn der Dienst zum ersten Mal gestartet wird. FYI. – gdoten

12

Ich hatte ein sehr ähnliches Problem. In meinem Fall war das Problem mit relativen Pfaden. Ich musste nur den absoluten Pfad angeben. Jetzt funktioniert es wie ein Zauber.

WriteTo.RollingFile(AppDomain.CurrentDomain.BaseDirectory + "\\logs\\log-{Date}.log") 

Hoffe es hilft!

+1

In '' Konfiguration, können Sie auch Umgebungsvariablen wie '% TEMP%' im Pfad verwenden - Putting Logs unter '% APPDATA%' oder ähnliches kann gut funktionieren. –

5

Ich hatte das gleiche Problem, das ist, was wir gefunden:

  • Serilog für Logfiles und Seq
  • Ddrable Protokolle aktiviert schreibt Roll konfigurieren.

Symptome - keine Protokolldateien erstellt werden wurden - Keine Seq geschrieben Protokolle.

Laut @ gdotens Kommentar wurden unsere Protokolldateien in \ windows \ syswow64 geschrieben (Dienst wurde als lokaler Dienst ausgeführt).
Wir sind der Meinung, dass die Berechtigungen für diese Dateien die dauerhafte Spool-Datei möglicherweise nicht lesen lassen, sodass keine Protokolle in Seq geschrieben werden.

Fix war zu hart den Pfad der rollinglogfile und Puffer.

1
loggerFactory.AddFile(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Log-{Date}.txt")); 

versuchen diese, es funktionierte in meinem ASP.NET Core 2-Anwendung läuft als Windows-Dienst

Verwandte Themen