2009-12-21 15 views
11

Wie kann ich auf spezielle Ordner log (z %APPDATA%) die app.config-Datei?Wie kann ich mit log4net in spezielle Ordner einloggen?

Ich kann es programmatisch tun, aber ich brauche für die Konfiguration der app.config-Datei verwenden zu können. Ich habe ein Post von %envFolderPath gesehen. Es ist nicht in der neuesten veröffentlichten Version verfügbar, aber nur in ihrem neuesten Code.

Unten ist der Code, den ich programmatisch das Protokoll in spezielle Ordner zu setzen.

public void ExampleLog 
{ 
    XmlConfigurator.Configure(); 

    var fileName = GetFileName(); 
    var appender = new log4net.Appender.RollingFileAppender 
    { 
     Layout = new log4net.Layout.PatternLayout("%d - %m%n"), 
     File = fileName, 
     MaxSizeRollBackups = 10, 
     MaximumFileSize = "100MB", 
     AppendToFile = true, 
     Threshold = Level.Debug 
    }; 

    appender.ActivateOptions(); 
    BasicConfigurator.Configure(appender); 
} 

private static string GetFileName() 
{ 
    const string subPath = "MySubFolder"; 
    var path = String.Format(@"{0}\{1}", Environment.GetFolderPath (Environment.SpecialFolder.CommonApplicationData), subPath); 
    const string logName = "Log.txt"; 
    return Path.Combine(path, logName); 
} 
+1

möglich Duplikat von [Wie häufig Anwendungsdatenordner für log4net angeben?] (Http://stackoverflow.com/questions/468989/how-to-specify-common-application-data-folder-for- log4net) –

Antwort

11

Ziemlich sicher, dass die Syntax dafür in der aktuellen Version verfügbar ist.

<file type="log4net.Util.PatternString" value="%env{APPDATA}\\MyApp\\Log.txt" /> 

Wenn Sie etwas mehr benötigen, können Sie in Option suchen die PatternString Klasse von Subklassen, wie hier beschrieben: Log4Net can’t find %username property when I name the file in my appender

+0

Sorry für späte Antwort. Vielen Dank! – user9969

+0

Ich glaube nicht, das ist eine gute Idee, weil unter Vista und Windows 7, löst% APPDATA% auf die * des Benutzers Roaming * Verzeichnis, das die Protokolldateien bedeutet, wird auf dem Domänenserver synchronisiert werden und heruntergeladen jedes Mal der Benutzer anmeldet in den Kommentar Siehe hier:. http://stackoverflow.com/questions/1572934/where-to-store-an-application-log-file-on-windows/1573015#1573015 – GuyBehindtheGuy

+2

Wenn Sie sich über die besorgt sind Zeit, um Roaming-Daten zu synchronisieren, dann verwenden Sie% LOCALAPPDATA% (das Nicht-Roaming-Äquivalent). Ich denke, das wäre in der Regel besser für Log-Dateien, egal wie groß sie werden. –

4

Schauen Sie sich die RollingFileAppender Konfigurationsbeispiel auf den log4net docs (für alle anderen Parameter) .

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="log.txt" /> 
    <appendToFile value="true" /> 
    <rollingStyle value="Size" /> 
    <maxSizeRollBackups value="10" /> 
    <maximumFileSize value="100KB" /> 
    <staticLogFileName value="true" /> 
    <layout type="log4net.Layout.SimpleLayout" /> 
    </layout> 
</appender> 

Ich habe Umgebungsvariablen verwiesen wird (einschließlich spezieller Ordner) mit dem Grund log4net variablem Format ${NAME}. Und die file Tag muss nicht die PatternLayout angegeben haben, es impliziert.

<file value="${APPDATA}\log.txt" /> 
Verwandte Themen