trace.writeline无法在azure Onstop方法中工作

时间:2012-10-24 21:50:55

标签: azure

我想知道为什么以下azure workerrole在角色关闭时没有显示任何诊断消息:

public class WorkerRole : RoleEntryPoint {

private bool running=true;

    public override void Run() {
        while (running)
        {
            Thread.Sleep(10000);
            TTrace.WriteLine("working", "Information");
        }
        Trace.WriteLine("stopped", "Information");
    }

    public override bool OnStart()
    {
        Trace.WriteLine("starting", "Information");
        return base.OnStart();
    }

    public override void OnStop() {
        Trace.WriteLine("stopping", "Information");
        running = false;
        base.OnStop();
    }
}

我可以在诊断日志中看到事件“开始”和“正常”,但Onstop方法不会记录任何内容。我想知道它是否甚至被调用,所以我在OnStop()方法中注入了一些代码来写出一些数据。事实上,数据是按预期编写的,这证明该方法被调用,只是我没有得到任何日志。任何想法如何跟踪我的关机代码?

2 个答案:

答案 0 :(得分:4)

我的第一个也是最好的猜测是,诊断代理没有时间将跟踪转移到存储中供您查看。首先在VM上本地记录跟踪,然后代理将根据您的配置将其传输(OnDemand或Scheduled)。 VM关闭后,代理也会消失,无法将其转移。

答案 1 :(得分:1)

不支持在OnStop中进行跟踪,如果您设法通过On-Demand Transfer(http://msdn.microsoft.com/en-us/library/windowsazure/gg433075.aspx)使其工作,则可能无法正常工作在下一个版本中。请注意,Web角色OnStart中的跟踪也不起作用。请参阅我的博文http://blogs.msdn.com/b/rickandy/archive/2012/12/21/optimal-azure-restarts.aspx以解决此问题。另请参阅我的博客文章,了解有关使用DbgView查看实时OnStop跟踪数据的说明。

OnStop方法应该只用于延迟关闭,直到你清理完为止 - 所以你不应该有很多代码要跟踪。再次,请参阅我的博客了解详情。