3 回答
TA贡献1859条经验 获得超6个赞
log4net可以为您解决这个问题。在这种情况下,可以使用log4net.Util.PatternString选项处理程序格式化字符串类型的任何appender属性。PatternString甚至支持SpecialFolder枚举,该枚举启用以下优雅的配置:
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" >
<file type="log4net.Util.PatternString"
value="%envFolderPath{CommonApplicationData}\\test.txt" />
...
</appender>
这是证明布丁的单元测试:
[Test]
public void Load()
{
XmlConfigurator.Configure();
var fileAppender = LogManager.GetRepository()
.GetAppenders().First(appender => appender is RollingFileAppender);
var expectedFile =
Path.Combine(
Environment.GetFolderPath(
Environment.SpecialFolder.CommonApplicationData),
"test.txt");
Assert.That(fileAppender,
Is.Not.Null & Has.Property("File").EqualTo(expectedFile));
}
以下测试验证log4net实际上已写入磁盘(这基本上使该测试成为“集成”测试,而不是单元测试,但我们暂时将其保留):
[Test]
public void Log4net_WritesToDisk()
{
var expectedFile =
Path.Combine(
Environment.GetFolderPath(
Environment.SpecialFolder.CommonApplicationData),
"test.txt");
if (File.Exists(expectedFile))
File.Delete(expectedFile);
XmlConfigurator.Configure();
var log = LogManager.GetLogger(typeof (ConfigTest));
log.Info("Message from test");
LogManager.Shutdown();
Assert.That(File.ReadAllText(expectedFile),
Text.Contains("Message from test"));
}
注意:我强烈建议使用上面示例中演示的紧凑属性语法。删除所有这些“ <property name =”可以使您的配置更具可读性。
- 3 回答
- 0 关注
- 408 浏览
添加回答
举报