log4net 在 web.config 表单测试代码中更改 LogLevel
log4net change LogLevel in web.config form test code
这是我的服务 web.config
:
中的 log4net 配置部分
<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"/>
。
---编辑---
把事情说清楚。这不是单元测试。这是对部署到 test-env 的生产服务工件进行 E2E 测试。我唯一能做的就是修改 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);
这是我的服务 web.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"/>
。
---编辑---
把事情说清楚。这不是单元测试。这是对部署到 test-env 的生产服务工件进行 E2E 测试。我唯一能做的就是修改 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);