为了账号安全,请及时绑定邮箱和手机立即绑定

如何以编程方式更改文件位置?

如何以编程方式更改文件位置?

C#
慕标琳琳 2019-12-11 14:09:28
我是Log4net的新手。我设法通过添加配置文件和简单的日志记录来解决问题。我已经将值硬编码为,"C:\temp\log.txt"但这还不够好。
查看完整描述

3 回答

?
BIG阳

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 =”可以使您的配置更具可读性。



查看完整回答
反对 回复 2019-12-12
  • 3 回答
  • 0 关注
  • 373 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信