C# 记录文件的文件夹名称
下面是如何设置log4net的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>
<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" />