2015-03-02 108 views
0

這裏是log4net的是如何成功設置文件夾名是越來越登錄

<log4net> 
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file type="log4net.Util.PatternString" value="..\AppLogs\%property{LogName}.txt" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="5" /> 
     <maximumFileSize value="5MB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%d{yyyy/MM/dd HH:mm:ss} [%thread] %-5level %logger - %message%newline" /> 
     </layout> 
    ............ 
</log4net>  

我知道我可以使用類似下面獲取日誌文件的文件名。

var fileAppender = log4net.LogManager.GetRepository().GetAppenders().First(appender => appender is RollingFileAppender); 

但是,我想獲取將創建日誌文件的文件夾名稱。有沒有辦法得到這個?

+0

你試過聲明文件作爲一個實例System.IO.FileInfo:'FileInfo temppath = new FileInfo(「指向文件或字符串變量的路徑表示文件路徑「)'然後使用目錄成員:'var ParentDirectory = temppath.Directory'應該給你父目錄。 – CalebB 2015-03-02 19:20:52

回答

0
var fileAppender = _logger.Logger.Repository.GetAppenders().OfType<RollingFileAppender>().FirstOrDefault(); 

假設你可以聲明你的_logger實例這樣

private static readonly ILog _logger = LogManager.GetLogger(typeof(YourClass)); 
0

File屬性包含完整路徑的日誌文件。一旦你有了,使用Path.GetDirectoryName來獲取文件夾。

這個MSTest的單元測試表明:

[TestInitialize] 
public void Setup() 
{ 
    log4net.GlobalContext.Properties["LogName"] = "testlogger"; 

    var fileInfo = new FileInfo("log4net.config.xml"); 

    if (fileInfo.Exists == false) 
    { 
     throw new InvalidOperationException("Can't locate the log4net config file"); 
    } 

    LogManager.ResetConfiguration(); 
    log4net.Config.XmlConfigurator.Configure(fileInfo); 
} 

[TestMethod] 
[DeploymentItem(@"log4net.config.xml")] 
public void log4net_RollingFileAppender_Is_Configured_Correctly() 
{ 
    var appender = log4net.LogManager.GetRepository() 
            .GetAppenders() 
            .OfType<RollingFileAppender>() 
            .First(); 

    Console.WriteLine(appender.File); 
    Console.WriteLine(Path.GetDirectoryName(appender.File)); 
} 

而且在配置:

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file type="log4net.Util.PatternString" value="..\AppLogs\%property{LogName}.txt" /> 

測試結果:

enter image description here