2015-03-02 73 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