2013-02-15 119 views
3

在Web应用项目的早期阶段,我决定使用Nlog作为我的日志记录解决方案,并且非常喜欢在代码中调用记录器类的想法,然后在run-时间什么和在哪里登录。然后我们决定将这个应用程序作为Web角色托管在Windows Azure中,以便利用所提供的所有功能。现在,我意识到Nlog不会像我设想的那样工作。以下是更改提出的问题:Web角色日志记录 - Nlog - 访问配置文件

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

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

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

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

回答

2

理查德,

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

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

埃里克

+0

+1 ...感谢您的回应!我们使用了我最初提到的一个表格存储解决方案。我们的一个人定制了他找到的代码。一点也不优化,但我们必须继续前进,但希望找到一个更好的解决方案(希望MS能够在这里看到问题,并为平台制定一个整体解决方案)。 – 2013-06-03 14:09:01

1

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

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

就在今天,我偶然发现了一个项目,它允许你在.cscfg中存储nlog配置文件。我还没有尝试过,但我会为我的新项目付出代价。这里是链接:NLog.Config.Azure

+0

+1 ...感谢您的回应!看起来很有趣。必须说服老板,他们可以信任我们的日志数据。我看过你提到的配置项目,但我们选择使用静态配置登录到表存储,如果需要更改(尚未发生),并且没有超出该配置,我们会重新发布该静态配置。我希望MS能够看到需求并创建一个全面的解决方案(手指交叉!)。不幸的是,在这一点上,我不能选择一个“已接受”的答案,但如果我们决定采纳您的建议,我们将会做出回答。 – 2013-06-03 14:18:00