【问题标题】:Web Role logging - Nlog - accessing config fileWeb 角色日志记录 - Nlog - 访问配置文件
【发布时间】:2013-02-15 22:17:20
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: logging azure nlog azure-web-roles


    【解决方案1】:

    理查德,

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

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

    埃里克

    【讨论】:

    • +1...感谢您的回复!我们选择了我最初的问题中提到的一种表存储解决方案。我们的一个人定制了他发现的代码。根本不是最优的,但我们不得不继续前进,但希望找到更好的解决方案(希望 MS 能看到这里的问题并在平台中制定一个整体解决方案)。
    【解决方案2】:

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

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

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

    【讨论】:

    • +1... 感谢您的回复!看起来很有趣。必须让老板相信他们可以信任我们的日志数据。我已经看过您提到的配置项目,但我们选择使用静态配置登录到表存储,如果我们需要更改(尚未发生)并且没有超出此范围,我们会重新发布该配置。我希望 MS 能够看到需求并创建一个全面的解决方案(祈祷!)。不幸的是,我目前无法选择“接受”的答案,但如果我们决定接受您的建议,我会选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多