Как я могу регистрировать ошибки и действия пользователя в Windows Azure (MVC)? - PullRequest
4 голосов
/ 20 ноября 2011

Azure меняется так быстро, что кто-то может дать мне несколько советов о том, как я могу войти:

  • Ошибки
  • Исключения
  • Действия пользователя

Я хотел бы иметь возможность занести их в табличное хранилище, чтобы их можно было получить с помощью кода и просмотреть на веб-страницах администратора.Я не особо ищу код, но я действительно хочу знать, где мне искать.Azure меняется так быстро, что я хочу быть уверенным в том, что лучше.

Спасибо

Ответы [ 3 ]

5 голосов
/ 22 ноября 2011

Azure имеет встроенную функцию регистрации и отслеживания, см.

http://msdn.microsoft.com/en-us/magazine/ff714589.aspx

для получения дополнительной информации по этому вопросу.

Вот как я сам использовал диагностику Azure:

Код:

using System;
using Microsoft.WindowsAzure.Diagnostics;

namespace CrossCuttingConcerns
{
    /// <summary>
    /// This class handles diagnostics and stores the logs in the Azure table and blog storage.
    /// Note: Basically all logs are turned on here, this can be expensive and you may want to change several settings here before going live
    /// </summary>
    public class AzureDiagnostics
    {
        /// <summary>
        /// Sets how often diagnostics data is transferred to the Azure table storage or blob storage
        /// Note: Change to a period that fits your need, commenting out one of these lines disables it
        /// </summary>
        /// <param name="diagnosticMonitorConfiguration"></param>
        void SetDiagnositcManagerScheduledTransferPeriods(DiagnosticMonitorConfiguration diagnosticMonitorConfiguration)
        {
            diagnosticMonitorConfiguration.Directories.ScheduledTransferPeriod = TimeSpan.FromMinutes(5);
            diagnosticMonitorConfiguration.Logs.ScheduledTransferPeriod = TimeSpan.FromMinutes(5);
            diagnosticMonitorConfiguration.WindowsEventLog.ScheduledTransferPeriod = TimeSpan.FromMinutes(5);
            diagnosticMonitorConfiguration.DiagnosticInfrastructureLogs.ScheduledTransferPeriod = TimeSpan.FromMinutes(5);
            diagnosticMonitorConfiguration.PerformanceCounters.ScheduledTransferPeriod = TimeSpan.FromMinutes(5);
        }

        /// <summary>
        /// Will add a full crashdump. 
        /// Note: Full crashdumps are not available in asp.net roles
        /// </summary>
        void AddFullCrashDumps()
        {
            CrashDumps.EnableCollection(true);
        }

        /// <summary>
        /// Enables performance counters
        /// Note: PerformanceCounterConfiguration.CounterSpecifier is language specific and depends on your OS language.
        /// Note: For a complete list of possible PerformanceCounterConfiguration.CounterSpecifier values run "typeperf.exe /Q"
        /// </summary>
        /// <param name="diagnosticMonitorConfiguration"></param>
        void AddPerformanceCounterMonitoring(DiagnosticMonitorConfiguration diagnosticMonitorConfiguration)
        {
            var performanceCounterConfiguration =
                new PerformanceCounterConfiguration
                {
                    CounterSpecifier = @"\Processor(*)\% Processor Time",
                    SampleRate = TimeSpan.FromSeconds(15)
                };

            diagnosticMonitorConfiguration.PerformanceCounters.DataSources.Add(performanceCounterConfiguration);
        }

        /// <summary>
        /// By default all Windows events to the Application and System logs are stored in the Azure table storage
        /// Note: Decide here what Windows event logs you are interested in seeing, you can also filter out events
        /// </summary>
        /// <param name="diagnosticMonitorConfiguration"></param>
        void AddEventLoggingFromWindowsEventLog(DiagnosticMonitorConfiguration diagnosticMonitorConfiguration)
        {
            // Syntax: <channel>!XPath Query
            // See: http://msdn.microsoft.com/en-us/library/dd996910(VS.85).aspx
            diagnosticMonitorConfiguration.WindowsEventLog.DataSources.Add("Application!*");
            diagnosticMonitorConfiguration.WindowsEventLog.DataSources.Add("System!*");
        }

        void StartDiagnosticManager(DiagnosticMonitorConfiguration diagnosticMonitorConfiguration)
        {
            DiagnosticMonitor.Start("DiagnosticsConnectionString", diagnosticMonitorConfiguration);
        }

        public void EnableAzureDiagnostics()
        {
            var diagnosticMonitorConfiguration = DiagnosticMonitor.GetDefaultInitialConfiguration();

            SetDiagnositcManagerScheduledTransferPeriods(diagnosticMonitorConfiguration);

            AddFullCrashDumps();
            AddPerformanceCounterMonitoring(diagnosticMonitorConfiguration);
            AddEventLoggingFromWindowsEventLog(diagnosticMonitorConfiguration);

            StartDiagnosticManager(diagnosticMonitorConfiguration);
        }
    }
}

Конфиг:

  <system.diagnostics>
    <trace>
      <listeners>
        <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="AzureDiagnostics">
        </add>
      </listeners>
    </trace>
  </system.diagnostics>
4 голосов
/ 07 июня 2013

Внесены дальнейшие изменения в ведение журнала Azure ....

Запись в журнал через Trace.TraceXXXX (например, Trace.TraceInformation) теперь будет регистрироваться в файловой системе Windows Azure (~ \ LogFiles \ Application *).txt).

Для просмотра этих файлов вам потребуется получить ftp-доступ к веб-сайту (включить через портал управления Azure / личную панель / учетные данные развертывания).

Сначала необходимо включить ведение журнала сстраницу параметров веб-сайта, доступ к которой можно получить либо из Visual Studio (обозреватель серверов / веб-сайты Windows Azure / имя сайта / параметры просмотра), либо из портала управления Azure (в разделе «Настройка» / «Диагностика приложения» / «Ведение журнала приложения»).

Эти журналы также можно увидеть на действующем веб-сайте Windows Azure из окна вывода Visual Studio (убедитесь, что вы выбрали «Журналы Windows Azure - xxx» в раскрывающемся меню «Показать вывод из»), если щелкнуть правой кнопкой мыши в Интернете.сайт в Visual Studio Server Explorer (в разделе Windows Azure Web Sites) и выберите «Просмотр потоковых журналов в Output Wi».ndow ".

Вход в окно вывода Visual Studio описан в блоге Скотта Гу (http://weblogs.asp.net/scottgu/archive/2013/04/30/announcing-the-release-of-windows-azure-sdk-2-0-for-net.aspx)

Примечание: я пробовал это только в VS2012.Не уверен, что он также работает в VS2010.

0 голосов
/ 21 ноября 2011

Я только что сделал что-то похожее на выходных.В итоге я просто создал 1 таблицу с именем «LogEvents» и использовал ключ провайдера для разделения различных типов событий и дат в журнале (например, ProviderKey = «20111121_LoginEvent», когда кто-то вошел в систему 21 ноября).

ДляПосле этого запросы можно легко выполнить по дате / типу и отобразить результат на странице администратора

Не уверен, что это лучший способ, но, похоже, он работает для меня.Я выполнил поиск в Google, но не смог найти ничего, что действительно сделало бы это.


Обновление 1: класс, который я использую, называется LogEvent:

public class LogEntry : TableServiceEntity
{
    public LogEntry(string logType)
    {
        if (LogType == null || LogType.Length == 0)
        {
            if (logType.Length > 0)
                LogType = logType;
            else
                LogType = "Default";
        }

        PartitionKey = string.Format("{0}_{1}", LogType, DateTime.UtcNow.ToString("yyyyMMdd"));
        RowKey = string.Format("{0:10}_{1}", DateTime.MaxValue.Ticks - DateTime.Now.Ticks, Guid.NewGuid());
    }

    public LogEntry()
    {

    }

    public string Message { get; set; }
    public DateTime LogDateTime { get; set; }
    public string LogType { get; set; }

}

Я просто создаю новый экземпляри установите свойства:

LogEntry le = new LogEntry("Default") { Message = "Default Page Loaded", LogDateTime=DateTime.Now };
        LogEntryDataSource ds = new LogEntryDataSource();
        ds.AddLogEntry(le);

Чтобы вернуть данные снова, я просто использую стандартный запрос Linq и передаю дату и LogType:

    public IEnumerable<LogEntry> GetLogEntries(string eventType, DateTime logDate)
    {
        var results = from g in this.context.LogEntry
                      where g.PartitionKey == String.Format("{0}_{1}", eventType, logDate.ToString("yyyyMMdd"))
                      select g;
        return results;
    }

Возможно, естьлучший способ, но это было довольно просто настроить, и это работает для меня

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...