繁体   English   中英

log4net更改web.config表单中的LogLevel测试代码

[英]log4net change LogLevel in web.config form test code

这是我的服务web.config log4net config部分:

<log4net>
  <appender name="OutputDebugStringAppender">
    ...
  </appender>
  <appender name="RollingFileAppender">
    ...
  </appender>
  <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
    ...
  </appender>
  <root>
    <level value="INFO"/>
    <appender-ref ref="OutputDebugStringAppender"/>
    <appender-ref ref="RollingFileAppender"/>
    <appender-ref ref="EventLogAppender"/>
  </root>
</log4net>

我想在功能测试(C#)准备期间,通过挂钩到现有的web.config文件,将<level value="INFO"/>更改为<level value="DEBUG"/>

- -编辑 - -

弄清楚。 这不是单元测试。 这是E2E测试,用于部署到test-env的生产服务工件。 我唯一能做的就是修改web.config文件。

! - -编辑 - -

目前,我有两个想法:

1)将web.config解析为XML文件,

2)使用正则表达式(我知道我会遇到两个问题:))

我想知道是否存在一种通用的更改日志级别的方法(也许是某种针对C#的log4net配置API?)

实现此目标的最佳解决方案是什么?

无需编辑您的配置文件。 您可以在运行时通过测试类更改为日志级别:

((log4net.Repository.Hierarchy.Hierarchy)LogManager.GetRepository()).Root.Level = Level.Debug;
((log4net.Repository.Hierarchy.Hierarchy)LogManager.GetRepository()).RaiseConfigurationChanged(EventArgs.Empty);

有时,最简单的解决方案就是最好的解决方案。 我放弃了寻找log4net机制和正则表达式解决方案的搜索。 最终版本是:

XmlDocument doc = new XmlDocument();
doc.Load(configFilePath);
XmlNode node = doc.SelectSingleNode("//log4net/root/level");
node.Attributes["value"].Value = "DEBUG";
doc.Save(configFilePath);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM