2009-12-21 14 views
11

App.config dosyasını kullanarak özel klasörlere (ör. %APPDATA%) nasıl giriş yapabilirim?Log4net ile Özel Klasörler'e nasıl giriş yapabilirim?

Programlı olarak yapabilirim, ancak yapılandırma için app.config dosyasını kullanabilmem gerekiyor. %envFolderPath'u kullanarak bir gönderi gördüm. En son yayınlanan sürümde mevcut değil, sadece en son kodlarında.

Günlüğü, özel klasörlere program aracılığıyla ayarladığım kod aşağıdadır.

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

olası yinelenen [log4net için ortak uygulama verileri klasörü belirtmek için nasıl?] (Http://stackoverflow.com/questions/468989/how-to-specify-common-application-data-folder-for- log4net) –

cevap

11

Bunun için sözdiziminin geçerli sürümde mevcut olduğundan emin olun.

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

size bir şey daha gerekiyorsa burada açıklandığı gibi, PatternString sınıfını alt seçeneği içine bakabilirsiniz: Log4Net can’t find %username property when I name the file in my appender

+0

Geç cevap için özür dilerim. Teşekkürler! – user9969

+0

Bunun iyi bir fikir olduğunu sanmıyorum çünkü Vista ve Windows 7'de% APPDATA% kullanıcının * dolaşım * dizinine gider, bu da günlük dosyalarının etki alanı sunucusuna senkronize edileceği ve her defasında kullanıcı günlüklerinin indirileceği anlamına gelir Buraya bakın: http://stackoverflow.com/questions/1572934/where-totore-an-application-log-file-on-windows/1573015#1573015 – GuyBehindtheGuy

+2

Eğer endişeleriniz varsa dolaşım verisini senkronize etme zamanı, daha sonra% LOCALAPPDATA% (dolaşım dışı eşdeğeri) kullanın. Bunun ne kadar büyük olursa olsun, günlük dosyaları için genellikle daha iyi olacağını düşünüyorum. –

4

atın (diğer tüm parametreleri için) log4net dokümanlar üzerinde RollingFileAppender yapılandırma örneği .

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

temel log4net değişken formatında ${NAME} ile (özel klasörler dahil) ortam değişkenleri başvurulan ettik. Ve file etiketinin PatternLayout belirtilmiş olması gerekmez, bunun ima edilmiş.

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