如何使用log4net.config文件更改服务的日志记录级别?

时间:2018-07-17 23:36:56

标签: c# asp.net-web-api log4net

我知道还有其他一些类似的问题和答案,但是它们在我的情况下不起作用。

我的应用程序获取我作为参数提供的文件夹中的log4net.config文件的路径。一旦获得确切的路径。我这样初始化XmlConfigurator:

(None, 120*240*32)

然后,我使用以下代码接收当前的日志记录级别

(None, 921600)

它将从该文件中检索正确的当前日志级别(我这样做是为了检查Configurator是否链接到该文件并正常工作)。

我从上一行代码中获取的值就是我需要更改的级别。为此,我使用以下代码,作为其他类似问题的解决方案:

 XmlConfigurator.ConfigureAndWatch(new FileInfo(configFilePath));

其中newLevel是存储要更改为的级别的变量,例如

string currentLevel = ((log4net.Repository.Hierarchy.Hierarchy)LogManager.GetRepository()).Root.Level.ToString();

经过大量调试,我意识到,如果在使用相同代码的上一个代码之后再次收到当前级别

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

再次声明,它实际上为我提供了日志记录级别的新设置值。

但是,有些原因,当我在文本编辑器中打开并查看它时,没有对实际的配置文件进行任何更改。另外,一旦我重新启动应用程序,或者在检查新设置的日志级别之前写了另一个XmlConfigurator.ConfigureAndWatch(与之前完全相同)语句,日志级别就会显示为不变。

请帮助我解决我的问题。非常感谢。

1 个答案:

答案 0 :(得分:0)

如果在程序中更改配置,则该配置不会反映在配置文件中。如果您的应用程序正在监视配置,则可以通过直接编辑配置文件来更改日志级别。它会被log4net拾取。