[英]Folder name of where file is getting logged
以下是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);
但是,我想获取将创建日志文件的文件夹名称。 无论如何得到这个?
var fileAppender = _logger.Logger.Repository.GetAppenders().OfType<RollingFileAppender>().FirstOrDefault();
假设您正在声明这样的_logger实例
private static readonly ILog _logger = LogManager.GetLogger(typeof(YourClass));
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" />
测试结果:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.