3

在 Web 应用项目的早期,我决定使用 Nlog 作为我的日志记录解决方案,并且非常喜欢在我的代码中调用记录器类,然后在运行时决定记录什么和在哪里记录的想法。然后我们决定这个应用程序应该以 Web 角色的形式托管在 Windows Azure 中,以利用所有这些优惠。现在,我意识到 Nlog 不会像我预想的那样工作。以下是变更引发的问题:

  • 它无法记录到标准日志文件夹中的文本文件,因为这些文件夹是只读的,即使它们不是,它们也会依赖于实例而不是持久的,因为实例和实例本地存储的方式是已配置,将在回收时消失。
  • 因为这些配置文件是只读的,所以我无法利用 Nlog 最强大的功能,即在运行时决定如何配置输出的能力。

我找到了一些解决登录位置问题的方法。将目标配置为记录到 Azure 诊断表或角色的表存储。虽然这可能是我们必须这样做的方式,但它似乎非常有限,因为您似乎只能登录到单个表(角色的诊断或自定义表)。有人知道更好的解决方案吗?记录到 AzureSQL 数据库的成本太高。

另外,如果我想临时登录到数据库或 SMS、电子邮件等,如果我无法编辑配置文件,我该如何配置 Nlog。我知道您可以将信息存储在 ServiceConfiguration.cscfg 文件中,并且可以在运行时访问和编辑它,但是 AFAIK,这不是 Nlog 配置的选项。有没有办法为所有实例编辑已部署的 web.cfg 或 Nlog 配置文件?

由于这些限制,是否最好放弃使用 Nlog,并使用不同的、更兼容的日志记录方法?

4

2 回答 2

2

理查德,

对于第一个问题,您可以设置一个本地存储资源来存储日志文件。您可以将本地资源配置为在角色重新启动时不清除,这有助于您的日志存活足够长的时间以发挥作用。

我不认为将日志记录配置存储在 .cscfg 文件中是一个好方法,除非您有一个允许您一次更新所有配置的管理解决方案。更好的方法是将配置文件保存在 blob 存储中,然后通过进程检查 blob 是否已更改。如果有,请下载文件并使用它。

埃里克

于 2013-04-15T20:58:59.027 回答
1

我知道这是一个老问题,但我会放弃我的两分钱。

我们正在使用logentries.com服务来保存我们的日志。免费套餐将您的数据保留一周,这对我们来说足够长了。我们确实将记录器的配置保存在单独的日志文件中,但我们在部署时不必更改记录器配置文件。

就在今天,我偶然发现了允许您将 nlog 配置文件存储在 .cscfg 中的项目。我自己还没有尝试过,但我会为我的新项目试一试。这是链接:NLog.Config.Azure

于 2013-06-01T01:07:26.580 回答