登录部署到Azure的.Net的首选方式

时间:2011-03-08 16:46:56

标签: .net logging azure

您是否认为this是在Azure部署的应用程序中执行简单传统日志记录的最佳方式?

如果想要实际获取文件等感觉很多......

什么最适合你?

7 个答案:

答案 0 :(得分:8)

我们使用写入Azure Table存储的诊断内置。每当我们需要写入日志的消息时,它只是一个“Trace.WriteLine(...)”。

由于日志已写入Azure表存储,因此我们有一个过程将下载日志消息,并将其从表存储中删除。这对我们很有用,但我认为这可能取决于应用程序。

http://msdn.microsoft.com/en-us/library/gg433048.aspx

希望它有所帮助!

[更新]

public void GetLogs() {
        int cnt = 0;
        bool foundRows = false;
        var entities = context.LogTable;
        while (1 == 1) {
            foreach (var en in entities) {
                processLogRow(en);
                context.DeleteObject(en);
                cnt++;
                try {
                    if (cnt % 100 == 0) {
                        foundRows = true;
                        context.SaveChanges(SaveChangesOptions.Batch);
                    }
                } catch (Exception ex) {
                    Console.WriteLine("Exception deleting batch. {0}", ex.Message);
                }
            }
            if (!foundRows)
                break;
            else {
                context.SaveChanges(SaveChangesOptions.Batch);
            }
            foundRows = false;
        }
        Console.WriteLine("Done! Total Deleted: {0}", cnt);
    }

答案 1 :(得分:6)

向Brosto的答案添加一点:配置Azure诊断只需几行代码。您决定要捕获的级别(详细,信息等)。以及您希望将本地缓存的日志消息推送到Azure存储的频率(我通常会使用15分钟的间隔)。然后,来自所有实例的日志消息将聚合到同一个表中,易于查询(或可下载),并具有定义角色和实例的属性。

还有其他跟踪语句,例如Trace.TraceError(),Trace.TraceWarning()等。

您甚至可以在本地计算机上创建跟踪侦听器并几乎实时地查看日志输出。 Azure AppFabric SDK Samples zip包含一个示例(在\ ServiceBus \ Scenarios \ CloudTrace下),用于执行此操作。

答案 2 :(得分:4)

对于错误记录,我看到的最佳解决方案是Elmah。它需要SQL数据库,但这是实际上有助于诊断问题的错误登录工具。它在Azure上运行良好。

答案 3 :(得分:3)

对于我的所有Azure站点,我使用自定义日志记录到Azure表。虽然有点工作,但我发现它让我可以更好地控制存储的信息。与上面评论的Brosto一样,最好有一个本地进程,定期将日志下载到本地系统。如果从TableServiceEntity派生类,则可以定义包含要记录的所有字段的结构,并使用相同的类检索本地应用程序中检索日志的数据。如果对任何人有任何帮助,我会在logging using Azure table storage页面上保留一些代码示例。

使用Trace.Writeline方法时遇到的一个问题是日志存储在本地实例上并定期传输到Azure表存储。鉴于Azure实例的瞬态特性,所有本地存储最多都必须被视为临时存储。因此,在本地驱动器上保存日志数据时,始终存在丢失日志数据的窗口。

考虑到Azure表存储事务的成本,直接登录Azure存储极具成本效益。如果性能对您来说是一个主要问题,那么将一个单独的线程(或多个线程)专用于为记录数据的内存保持队列提供服务可能是值得的。虽然如果Azure实例被回收,这显然会给瞬态数据带来类似的问题,但发生这种情况的窗口应该小得多。

答案 4 :(得分:2)

如前所述,使用Windows Azure诊断是可行的方法。但是,来自所有实例的所有日志记录都会在一个大列表中结束,这很难通读。因此,我尝试仅向诊断表发送相对重要的消息(警告级别和更高级别)。即便如此,直接阅读表也是一件痛苦的事。有一些工具,我个人使用Cerebrata Diagnostics Manager。

虽然直接使用Trace函数可以正常工作,但我建议使用日志框架,如NLog或log4net。这使您可以更灵活地将一些消息Trace / Azure Diagnostics和其他消息发送到本地存储。

例如,我添加了大量的跟踪日志记录来跟踪线程挂起问题。我发现给出一个根相对文件路径,如“\ ServiceLogs \ MyLog.txt”将输出到实例上的F:驱动器。所以我将所有这些都路由到实例文件系统,而不是诊断表。您必须远程访问每个实例以查看这些日志,但在这种情况下,这是一个很好的权衡。

答案 5 :(得分:2)

我使用Enterprise Library 5.0 Logging Application Block指向Azure诊断监视器跟踪侦听器。

Enterprise Library on Windows Azure

答案 6 :(得分:0)

虽然不是传统的日志记录框架Story framework,但是当你真正想要阅读你的日志时,this blog post可以真正提供帮助,它会使#34;您在上下文中编写所有日志(并添加其他相关信息),以便以后在需要阅读时获得所需的一切。

它还支持将日志保存到Azure Table存储。

{{3}}上有更多信息和示例。