C# 记录文件的文件夹名称

C# 记录文件的文件夹名称,c#,log4net,C#,Log4net,下面是如何设置log4net的 <log4net> <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> <file type="log4net.Util.PatternString" value="..\AppLogs\%property{LogName}.txt" /> <appendToFile value=

下面是如何设置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>    
但是,我想获取将在其中创建日志文件的文件夹名称。是否仍然可以获取此信息?

该属性包含日志文件的完整路径。一旦有了它,使用
Path.GetDirectoryName
获取文件夹

var fileAppender = _logger.Logger.Repository.GetAppenders().OfType<RollingFileAppender>().FirstOrDefault();
此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));
}
[测试初始化]
公共作废设置()
{
log4net.GlobalContext.Properties[“LogName”]=“testlogger”;
var fileInfo=newfileinfo(“log4net.config.xml”);
if(fileInfo.Exists==false)
{
抛出新的InvalidOperationException(“找不到log4net配置文件”);
}
LogManager.ResetConfiguration();
log4net.Config.XmlConfigurator.Configure(fileInfo);
}
[测试方法]
[DeploymentItem(@“log4net.config.xml”)]
public void log4net_RollingFileAppender_配置正确()
{
var appender=log4net.LogManager.GetRepository()
.GetAppenders()
第()类
.First();
Console.WriteLine(appender.File);
WriteLine(Path.GetDirectoryName(appender.File));
}
在配置中:

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

测试结果:


您是否尝试将文件声明为System.IO.FileInfo的实例:
FileInfo temppath=new FileInfo(“文件路径或表示文件路径的字符串变量”)
然后使用目录成员:
var ParentDirectory=temppath.Directory
,该成员应为您提供父目录。
[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" />