Не могли бы вы сказать это - самый оптимальный способ простого обычного ведения журнала в развернутом приложении Azure?
Если вам нравится большая работа, чтобы на самом деле добраться до файлов и т.д.
Что сработало лучше всего для вас?
Не могли бы вы сказать это - самый оптимальный способ простого обычного ведения журнала в развернутом приложении Azure?
Если вам нравится большая работа, чтобы на самом деле добраться до файлов и т.д.
Что сработало лучше всего для вас?
Мы используем сборку в диагностике, которая записывает в хранилище таблиц Azure. Каждый раз, когда нам нужно сообщение, записанное в журнал, это просто "Trace.WriteLine(...)".
Поскольку журналы записываются в Azure Table Storage, у нас есть процесс, который будет загружать сообщения журнала и удалять их из хранилища таблиц. Это хорошо работает для нас, но я думаю, что это, вероятно, зависит от приложения.
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);
}
Добавление бит в ответ Brosto: для настройки Azure Diagnostics требуется всего несколько строк кода. Вы определяете, какой уровень вы хотите захватить (подробный, информационный и т.д.). и как часто вы хотите выталкивать локально-кэшированные сообщения журнала в хранилище Azure (обычно я занимаюсь примерно 15-минутными интервалами). Журнальные сообщения из всех ваших экземпляров затем агрегируются в одну и ту же таблицу, легко просматриваются (или загружаются), со свойствами, определяющими роль и экземпляр.
Существуют дополнительные инструкции трассировки, такие как Trace.TraceError(), Trace.TraceWarning() и т.д.
Вы даже можете создать прослушиватель трассировки и наблюдать за выходом журнала в почти реальном времени на локальном компьютере. Azure AppFabric SDK Образцы zip содержат образец (в\ServiceBus\Scenarios\CloudTrace) для этого.
Для регистрации ошибок наилучшее решение, которое я видел, это Elmah. Для этого требуется база данных SQL, но это инструмент регистрации ошибок, который помогает диагностировать проблемы. Он отлично работает на Azure.
Для всех моих сайтов Azure я использую пользовательские ведение журнала для таблиц Azure. Хотя немного больше работы, я считаю, что это дает мне больше контроля над информацией, которая хранится. Как и выше Brosto, лучше всего, чтобы локальный процесс периодически загружал журналы в вашу локальную систему. Если вы выведете класс из TableServiceEntity
, вы можете определить структуру, содержащую все поля, которые вы хотите зарегистрировать, и использовать один и тот же класс для извлечения данных в локальном приложении, которое извлекает журналы. Я поддерживаю некоторые примеры кода для этого на ведении журнала с использованием страницы хранения таблиц Azure, если он какой-либо помощи кому-либо.
Одной из проблем, с которыми я столкнулся с использованием метода Trace.Writeline
, является то, что журналы хранятся в локальном экземпляре и периодически переносятся в хранилище таблиц Azure. Учитывая временный характер экземпляра Azure, все локальные хранилища должны быть в лучшем случае считаться временными. Поэтому всегда есть окно для потери данных журнала, когда оно хранится на локальном диске.
Учитывая стоимость транзакций хранения таблиц Azure, регистрация непосредственно в Azure-хранилище чрезвычайно экономична. Если производительность является для вас серьезной проблемой, может быть целесообразно посвятить отдельный поток (или потоки) обслуживанию обслуживаемой очереди данных регистрации. Хотя это, очевидно, дает аналогичные проблемы с временными данными, если экземпляр Azure перерабатывается, окно для этого должно быть намного меньше.
Как уже упоминалось, использование Windows Azure Diagnostics - это путь. Тем не менее, все записи из всех ваших экземпляров попадают в один большой список, который трудно прочитать. Поэтому я стараюсь только отправлять относительно важные сообщения (уровень предупреждения и выше) в таблицы диагностики. Даже так больно читать таблицу напрямую. Есть несколько инструментов, я лично использую диспетчер диагностики Cerebrata.
Хотя использование функций Trace напрямую работает нормально, я бы предложил использовать структуру ведения журнала, такую как NLog или log4net. Это дает вам дополнительную гибкость для отправки некоторых сообщений Trace/Azure Diagnostics и других в локальное хранилище.
Например, я добавил тонну отслеживания трассировки для отслеживания проблемы с зависанием нитей. Я обнаружил, что предоставление корневого пути к файлу, такого как "\ ServiceLogs\MyLog.txt", будет выводиться на диск F: на экземпляре. Поэтому я направил все это в файловую систему экземпляра, а не в таблицы Diagnostics. Вам нужно дистанционно в каждом экземпляре увидеть эти журналы, но в этом случае это хороший компромисс.
Я использую Блок регистрации приложений Enterprise Library 5.0, указывающий на прослушиватель трассировки Azure Diagnostic Monitor.
В то время как традиционная структура ведения журналов Структура истории может действительно помочь, когда вы действительно хотите читать свои журналы, она "делает" вы пишете все журналы (и добавить другую соответствующую информацию) в контексте, поэтому, когда вам нужно прочитать его позже, вы получите все, что вам нужно.
Он также поддерживает сохранение журналов в хранилище таблиц Azure.