我们使用写入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)
在Brosto的答案中添加一点:配置Azure诊断只需几行代码.您决定要捕获的级别(详细,信息等).以及您希望将本地缓存的日志消息推送到Azure存储的频率(我通常会使用15分钟的间隔).然后,来自所有实例的日志消息将聚合到同一个表中,可轻松查询(或可下载),并具有定义角色和实例的属性.
还有其他跟踪语句,例如Trace.TraceError(),Trace.TraceWarning()等.
您甚至可以在本地计算机上创建跟踪侦听器并几乎实时地查看日志输出.在Azure的AppFabric的SDK示例zip包含了这样一个样本(下\ ServiceBus \方案\ CloudTrace).