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

Rir*_*iri 20 .net logging azure

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

如果感觉做了很多工作来实际获取文件等...

哪种方法最适合你?

Bro*_*sto 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);
    }
Run Code Online (Sandbox Code Playgroud)

  • 对于任意数量 < 100 的实体,永远不会调用 SaveChanges。当代码不干净时就会发生这种情况。 (2认同)

Dav*_*gon 6

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

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

您甚至可以在本地计算机上创建跟踪侦听器并几乎实时地查看日志输出.在Azure的AppFabric的SDK示例zip包含了这样一个样本(下\ ServiceBus \方案\ CloudTrace).