如何在不依赖客户端应用程序或web.config的dll中使用log4net?

时间:2012-12-13 13:40:07

标签: c# logging azure log4net

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

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

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

我不想使用Azure诊断程序,因为这会降低此大型用户基础应用程序的性能。此外,我希望将日志记录和诊断降至最低(或完全禁用),并且只在各个级别启用它们来调试生产问题或拍摄其性能快照。我不想重新部署我的应用程序。

最好的方法是什么?

2 个答案:

答案 0 :(得分:6)

我建议不要将log4net配置存储在web / app.config文件中,而是存放在可以在外部更新的不同文件中(例如:在blob存储中),并且可以从服务配置或内容中动态更改其位置无需重新部署即可更改。

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

执行所需操作的一种方法是将该方法传递给Azure存储中存储的配置文件的公共URL。可以从服务配置控制配置文件的位置。

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

点击此处查看更多信息: http://logging.apache.org/log4net/release/manual/configuration.html

答案 1 :(得分:-1)

我可以想到两种方式:

使用Web Deploy,只需更新服务器上的文件,而无需执行完整的部署过程。

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