In unserer C # -App schreiben wir Dateien in Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
. Unsere log4net Logfile sollte auch dort gehen, also haben wir application.conf
wie folgt definiert:
Das funktioniert, bis wir auf einem PC mit einem nicht-englischen Windows laufen. Dann zeigt SpecialFolder.MyDocuments
auf den Ordner Mijn Documenten
, während das Protokoll weiterhin auf My Documents
verweist. Verwirrung entsteht, denn jetzt sind unsere Dateien an zwei Stellen.
Ich möchte mein Protokoll in den "echten" Ordner "Eigene Dateien" schreiben. Wie mache ich das?
%USERPROFILE%
zu finden, aber für My Documents scheint es keine zu geben. application.conf
nicht erreichbar ist. Ich habe versucht, den Parameter File
meines Appenders programmgesteuert wie folgt zu überschreiben:
Das funktioniert auch nicht: Wenn ich die Interna meines Loggers überprüfe, meldet die Eigenschaft File
glücklich Mijn Documenten
, aber in der Zwischenzeit gehen die Logs immer noch zu My Documents
.
Mir gehen die Ideen aus!
Es scheint mindestens zwei Ansätze zu geben. Das einfachste ist eine Art Hack:
Geben Sie eine benutzerdefinierte Umgebungsvariable an, um den Stammpfad in Ihrer log4net-Konfiguration anzugeben:
<file value="%MYAPP_USER_ROOTFOLDER%\MyApp\log.txt"/>
Legen Sie beim Start vor dem Initialisieren der Protokollierung diesen Umgebungsvariablenwert fest:
Environment.SetEnvironmentVariable("MYAPP_USER_ROOTFOLDER", Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments));
Der kompliziertere aber empfohlene Ansatz wird hier erklärt: Ссылка und hier < a href="http://ziqbalbh.com/articles/log4net-another-way-to-change-log-file-location-on-runtime/"> Ссылка
Die angenommene Antwort ist veraltet.
Sie sollten jetzt verwenden:
%Vor%(Dies sollte sogar unter Windows 7 funktionieren, wo "Dokumente" mit dem Alias "Eigene Dateien" bezeichnet wird.)
${UserProfile}
wird C: \ Benutzer [Benutzername] zugeordnet, auch wenn diese Variable nicht explizit in Ihrer Umgebungsvariablenliste definiert ist.