简体   繁体   English

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

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

Here is log4net config section from my service web.config : 这是我的服务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>

I would like to change <level value="INFO"/> to <level value="DEBUG"/> during functional test (C#) preparation by hooking to existing web.config file. 我想在功能测试(C#)准备期间,通过挂钩到现有的web.config文件,将<level value="INFO"/>更改为<level value="DEBUG"/>

---EDIT--- - -编辑 - -

To make thing clear. 弄清楚。 This is not unit test. 这不是单元测试。 This is E2E test working on production service artifacts deployed to test-env. 这是E2E测试,用于部署到test-env的生产服务工件。 The only thing I can do is to modify web.config file. 我唯一能做的就是修改web.config文件。

!---EDIT--- ! - -编辑 - -

Currently, I have two ideas: 目前,我有两个想法:

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

2) Use regex (I know that I'll have two problems then :) ) 2)使用正则表达式(我知道我会遇到两个问题:))

I wonder if there is a universal way to change log level (maybe some kind of log4net configuration API for C#?) 我想知道是否存在一种通用的更改日志级别的方法(也许是某种针对C#的log4net配置API?)

What is the best solution to achieve this? 实现此目标的最佳解决方案是什么?

There is no need to edit your config files. 无需编辑您的配置文件。 You can change to loglevel at runtime with in you test classes: 您可以在运行时通过测试类更改为日志级别:

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

Sometimes the simplest solutions are the best solutions. 有时,最简单的解决方案就是最好的解决方案。 I've abandoned searching for log4net mechanisms and regex solutions. 我放弃了寻找log4net机制和正则表达式解决方案的搜索。 The final version is: 最终版本是:

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