繁体   English   中英

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

[英]How do I use log4net within a dll that does not depend on a client's app or web.config?

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

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

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

我不想使用Azure诊断,因为这将降低大型用户基础应用程序的性能。 此外,我希望将日志记录和诊断信息减少到最低限度(或完全禁用),并仅在各个级别启用它们以调试生产问题或对其性能进行快照。 我不想重新部署我的应用程序。

最好的方法是什么?

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

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

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

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

在此处检查更多信息: http : //logging.apache.org/log4net/release/manual/configuration.html

我可以想到两种方式:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM