3 回答

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超8個(gè)贊
log4net可以為您解決這個(gè)問題。在這種情況下,可以使用log4net.Util.PatternString選項(xiàng)處理程序格式化字符串類型的任何appender屬性。PatternString甚至支持SpecialFolder枚舉,該枚舉啟用以下優(yōu)雅的配置:
<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));
}
以下測試驗(yàn)證log4net實(shí)際上已寫入磁盤(這基本上使該測試成為“集成”測試,而不是單元測試,但我們暫時(shí)將其保留):
[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"));
}
注意:我強(qiáng)烈建議使用上面示例中演示的緊湊屬性語法。刪除所有這些“ <property name =”可以使您的配置更具可讀性。
- 3 回答
- 0 關(guān)注
- 400 瀏覽
添加回答
舉報(bào)