2009-12-21 69 views
11

如何使用app.config文件登錄到特殊文件夾(例如%APPDATA%)?如何使用log4net登錄到特殊文件夾?

我可以通過編程來實現,但我需要能夠使用app.config文件進行配置。我看到過使用%envFolderPath的帖子。它不是最新發布的版本,但只在最新的代碼中提供。

以下是我以編程方式將日誌設置爲特殊文件夾的代碼。

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

可能重複[如何指定log4net的通用應用程序數據文件夾?(http://stackoverflow.com/questions/468989/how-to-specify-common-application-data-folder-for- log4net) – 2011-06-16 03:47:18

回答

11

很確定這個語法在當前版本中可用。

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

如果你需要更多的東西,你可以看看繼承了PatternString類的選項,如下所述:Log4Net can’t find %username property when I name the file in my appender

+0

對於遲到的回覆很抱歉。謝謝! – user9969 2009-12-22 21:56:52

+0

我不認爲這是一個好主意,因爲在Vista和Windows 7上,%APPDATA%解析爲用戶的*漫遊*目錄,這意味着日誌文件將同步到域服務器並在用戶每次登錄時下載請參閱此處的評論: http://stackoverflow.com/questions/1572934/where-to-store-an-application-log-file-on-windows/1573015#1573015 – GuyBehindtheGuy 2010-08-25 15:07:21

+2

如果您關注時間來同步漫遊數據,然後使用%LOCALAPPDATA%(非漫遊等價物)。我認爲對於日誌文件來說,無論大小如何,通常都會更好。 – 2011-10-05 11:18:38

4

檢查出log4net的文檔的RollingFileAppender配置樣品(對於所有其它參數) 。

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

我引用的環境變量(包括特殊文件夾)的基本log4net的可變格式${NAME}file標籤不需要指定PatternLayout,這是隱含的。

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