2017-03-27 54 views
0

對於此應用程序(CMS)Log4net在Config/log4net.config中配置。Log4.net - 如何登錄到運行時設置的文件夾?

我需要設置日誌文件在運行時動態放置的路徑。

我曾嘗試添加以下代碼來Global.asax中(和OnApplicationStarting)

log4net.GlobalContext.Properties["path"] = "testlog"; 
log4net.Config.XmlConfigurator.Configure(); 

加改變配置以

<file type="log4net.Util.PatternString" value="c:\Logs\%property{path}\AppLog.log" /> 

在log4net.config

它首先創建一個目錄c:\Logs\(null)\AppLog.log - 並開始記錄 - 並在一段時間後創建通緝目錄 - c:\Logs\testlog\AppLog.log - 並繼續是該目錄中的日誌記錄。

我似乎無法在日誌記錄開始前掛鉤。任何人有解決方案或想法,我應該怎麼做 - 所以我沒有得到(空)目錄第一?

我可以以某種方式訪問​​在web.config中設置的值,並將其用作文件夾名稱中的動態部分?

+0

與任何進展? –

回答

1

你需要把這個:

[assembly: log4net.Config.XmlConfigurator(Watch = true)] 

AssemblyInfo.cs

,並得到記錄器之前添加屬性。 這裏是一個工作示例:

我的配置:

<appender name="RollingFileAppender" type="log4net.appender.RollingFileAppender"> 
      <file type="log4net.Util.PatternString" value="C:\MyLogs\%property{LogFileName}.txt"/> 
      <appendToFile value="true"/> 
      <rollingStyle value="Size"/> 
      <maximumFileSize value="10MB"/> 
      <maxSizeRollBackups value="5"/> 
      <staticLogFileName value="true"/> 
      <layout type="log4net.Layout.PatternLayout"> 
       <conversionPattern value="%date{ABSOLUTE} [%logger] %level - %message%newline%exception"/> 
      </layout> 
     </appender> 

和C#代碼:

using System; 

[assembly: log4net.Config.XmlConfigurator(Watch = true)] 

namespace Log4NetConsoleApplication 
{ 
    class Program 
    { 

     static void Main(string[] args) 
     { 
      log4net.GlobalContext.Properties["LogFileName"] = "log";  

      log4net.ILog log = LogHelper.GetLogger(); 

      Console.WriteLine("hello world"); 

      log.Error("This is my error message"); 

      Console.ReadLine(); 
     } 
    } 
} 
相關問題