如何在Windows Azure上为所有Web角色更改Web.config中的日志记录设置?

时间:2012-11-29 08:41:06

标签: logging azure log4net

Windows Azure上的ASP.NET应用程序。 该应用程序是可扩展的,可在1..N Web角色实例上运行。

我们已将log4net写入Windows事件日志,并将Windows Azure诊断整合到Azure存储中。

目前,log4net配置存储在Web.config中。

对于应用程序日志记录,我们有以下要求:

  1. 能够指定要写入日志的一种或多种日志条目的列表

  2. 能够指定日志条目写入日志的级别(每个日志条目)

  3. 记录器命名约定满足第一个要求。记录器定义层次结构,并为程序员提供运行时控制,以打印或不打印哪些语句。

    ILog log = LogManager.GetLogger("Davanti.WMS.Core.Logic.Inventory");
    

    第二个要求可以通过使用日志级别DEBUG,INFO,WARN,ERROR和FATAL来实现。

    log.Debug("Process has completed");
    

    现状

    我们在Web.config文件中只有一个log4net配置重定向到Windows事件日志。并根据存储在中央数据库中的设置,控制 以记录(请参阅要求1)和深度(级别)以在应用程序代码中记录(请参阅要求2)。 / p>

    这种方法会对应用程序性能产生负面影响,因为应用程序本身必须检查某些消息是否需要(同步)记录在日志框架上(异步)。

    所需情况

    我们希望从log4net设置控制记录和记录级别的内容。问题是我们必须在所有 Windows Azure Web角色实例上应用log4net设置。对此最好的方法是什么?

    此外,我们希望有一种更加用户友好的方式来启用日志记录(例如,由顾问)。有什么可能性?

    例如使用Enterprise Library Configuration编辑器。 混淆设置的直观表示。 http://img651.imageshack.us/img651/930/logging.jpg

1 个答案:

答案 0 :(得分:0)

默认配置提供程序将查看您的案例中的app.config或web.config。但是,您可以使用XmlConfigurator类从Stream

加载配置

http://logging.apache.org/log4net/release/sdk/log4net.Config.XmlConfigurator.Configure_overload_7.html

在角色配置中,您可以指定blob位置,然后使用Azure存储SDK中的Blob客户端对象,并从单个blob位置加载xml。

Log4Net配置:http://logging.apache.org/log4net/release/manual/configuration.html

这类似于使用xml blob的Azure诊断配置。

需要注意的是,如果要对日志记录进行实时更改,则需要执行更多实施,例如定期排队以更新文件。