2009-12-21 18 views
11

Jak mogę zalogować się do folderów specjalnych (na przykład %APPDATA%) przy użyciu pliku app.config?Jak mogę zalogować się do folderów specjalnych za pomocą narzędzia log4net?

Mogę to zrobić programowo, ale muszę mieć możliwość użycia pliku app.config do konfiguracji. Widziałem stanowisko z użyciem %envFolderPath. Nie jest dostępne w najnowszej wydanej wersji, ale tylko w ich najnowszym kodzie.

Poniżej znajduje się kod programujący logicznie programowanie folderów specjalnych.

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

możliwe duplikat [Jak określić wspólny folder Dane aplikacji dla log4net?] (Http://stackoverflow.com/questions/468989/how-to-specify-common-application-data-folder-for- log4net) –

Odpowiedz

11

Całkiem pewna składnia jest dostępna w bieżącym wydaniu.

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

Jeśli potrzebujesz czegoś więcej, można zajrzeć do opcji instacji klasy PatternString, jak opisano tutaj: Log4Net can’t find %username property when I name the file in my appender

+0

Przepraszamy za spóźnioną odpowiedź. Dzięki! – user9969

+0

Nie sądzę, że jest to dobry pomysł, ponieważ w systemach Vista i Windows 7% APPDATA% przechodzi do katalogu * roaming * użytkownika, co oznacza, że ​​pliki dziennika będą synchronizowane z serwerem domeny i pobierane za każdym razem, gdy dzienniki użytkownika in. Zobacz komentarz tutaj: http://stackoverflow.com/questions/1572934/where-to-store-an-application-log-file-on-on-windows/1573015#1573015 – GuyBehindtheGuy

+2

Jeśli martwisz się o czas na zsynchronizowanie danych roamingowych, a następnie użyj% LOCALAPPDATA% (odpowiednik inny niż roamingowy). Myślę, że w każdym razie byłoby lepiej w przypadku plików dziennika, niezależnie od tego, jak duże są. –

4

Wyjazd próbka RollingFileAppender konfiguracja na docs log4net (dla wszystkich innych parametrów) .

<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> 

mam odwoływać zmienne środowiskowe (w tym specjalne foldery) z podstawowym log4net zmiennym formacie ${NAME}. Znacznik file nie musi mieć podanego PatternLayout, jest to domniemane.

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