0

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

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

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

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

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

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

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

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

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

log.Debug("Process has completed");

现在的情况

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

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

所需情况

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

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

例如使用企业库配置编辑器。配置设置的可视化表示。 http://img651.imageshack.us/img651/930/logging.jpg

4

1 回答 1

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 诊断配置。

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

于 2012-11-29T16:57:44.203 回答