C# 如何在不依赖于客户端的dll中使用log4net';是应用程序还是web.config?

C# 如何在不依赖于客户端的dll中使用log4net';是应用程序还是web.config?,c#,logging,azure,log4net,C#,Logging,Azure,Log4net,我希望能够动态控制基于Azure云的应用程序执行日志记录的级别。为此,我创建了一个共享的基于log4net的DLL 关于log4net日志记录有很多问题,但几乎所有问题都涉及在配置文件或其他文本文件中输入和操作设置。在Azure云中,更改web.config意味着重新部署。我想通过从管理门户对应用程序进行web服务调用来更改日志记录 我还有几个应用程序,我希望每个应用程序都使用新的基于log4net的DLL,而不必在每个配置文件中存储相同的设置,例如Appender详细信息。应用程序记录相同、一

我希望能够动态控制基于Azure云的应用程序执行日志记录的级别。为此,我创建了一个共享的基于log4net的DLL

关于log4net日志记录有很多问题,但几乎所有问题都涉及在配置文件或其他文本文件中输入和操作设置。在Azure云中,更改web.config意味着重新部署。我想通过从管理门户对应用程序进行web服务调用来更改日志记录

我还有几个应用程序,我希望每个应用程序都使用新的基于log4net的DLL,而不必在每个配置文件中存储相同的设置,例如Appender详细信息。应用程序记录相同、一致的数据

我不想使用Azure diagnostics,因为这将降低这个大型用户基础应用程序的性能。此外,我希望将日志记录和诊断减少到最低限度(或完全禁用),只允许它们在不同级别调试生产问题或拍摄性能快照。我不想重新部署我的应用程序

最好的方法是什么?

我可以想出两种方法:

使用WebDeploy只更新服务器上的文件,而不必执行完整的部署过程


在Azure实例上启用RDP,只需登录并就地更改配置文件,就像任何其他服务器一样

我建议不要将log4net配置存储在web/app.config文件中,而是存储在可在外部更新的不同文件中(即:在blob存储中)可以通过服务配置动态更改其位置,也可以通过重新部署来更改其内容

查看log4net.Config.XmlConfigurator.Configure方法。您可以向它传递许多不同的参数,而不只是在没有参数的情况下调用它(无参数默认方法从app.config文件读取)

一种方法是向Configure方法传递存储在Azure存储中的配置文件的公共URL。可以通过服务配置控制配置文件的位置

或者,如果不想将配置文件公开,可以从存储中的某个私有位置实现自己的XML配置读取器,并将XML文档传递给Configure()方法

请在此处查看更多信息:

这仍然需要在每个应用程序的web.config中复制appender详细信息。我想将appender详细信息存储在所有应用程序通用的位置。很抱歉,我误解了这个问题。请参阅本文,了解如何将log4net配置移出web配置,然后您可以更新所有web配置以指向同一个文件。然后你有一个文件要更改,它将影响所有应用程序。我不推荐上述任何方法。这仅仅是因为在升级服务、角色回收、来宾操作系统更新/路径、硬件故障以及当前实例移动到另一个硬件之后,以任何一种方式进行的更改都将丢失,可能还有其他一些原因。那么,你是说Web部署没有用吗?是的。我将仅在单个实例WebRole上启用和使用WebDeploy,并且仅在微调/调试/测试阶段启用和使用WebDeploy。绝对不要在生产中使用WebDeploy for Azure WebRole。我只想说同样的话…哈哈:)感谢John M Gant的帮助: