Описание сервиса логирования.

Устройство системы логирования Flexberry Ember

Сервис логирования представляет собой один из доступных во фреймворке Flexberry Ember сервисов и обеспечивает запись сообщений различного уровня в базу данных приложения.

Сервис логирования Flexberry Ember расширяет возможности стандартного логгера фреймворка Ember.js.

При инициализации приложения данный сервис автоматически внедряется с именем logService на уровни:

По умолчанию сервис логирования выключен, существует возможность включить его как программно, так и в файле конфигурации.

Возможности сервиса log

Уровни логирования

Сервис логирования поддерживает семь уровней логирования:

  • ERROR - уровень ошибок;
  • WARN - уровень предупреждений;
  • LOG- уровень логов;
  • INFO- уровень информационных сообщений;
  • DEBUG- уровень отладочных сообщений;
  • DEPRECATION- уровень сообщений о подозрительных и устаревших участках исходного кода;
  • PROMISE- уровень ошибок промисов.

Разработчик может самостоятельно сгенерировать сообщения данных уровней, используя соответствующие методы класса Ember.Logger:

Ember.Logger.error('Текст сообщения об ошибке'); // уровень ошибок
Ember.Logger.warn('Текст предупреждения'); // уровень предупреждений;
Ember.Logger.log('Текст лога'); // уровень логов;
Ember.Logger.info('Информационный текст'); // уровень информационных сообщений;
Ember.Logger.debug('Отладочный текст'); // уровень отладочных сообщений;
Ember.Logger.warn('DEPRECATION "Текст лога"'); // уровень сообщений о подозрительных и устаревших участках исходного кода.

Пользователь в случае необходимости может дождаться выполнения асинхронной операции записи сообщения в базу, используя оператор then. Например:

 Ember.Logger.error('Текст сообщения об ошибке').then(result => {«действия после записи сообщения в БД»});

Кроме того, по завершении промиса инициируется событие с именем уровня ошибки. Например, ERROR, WARN и т.п. Обработчики событий с этими именами можно создать с использованием методов класса Evented.

ERROR - уровень ошибок

На уровень ERROR выводятся следующие сообщения об ошибках:

WARN - уровень предупреждений

На уровень WARN выводятся предупреждения, формируемые методом Ember.Logger.warn.

LOG - уровень логов

На уровень LOG выводятся сообщения, формируемые методом Ember.Logger.log.

INFO - уровень информационных сообщений

На уровень INFO выводятся информационные сообщения, формируемые методом Ember.Logger.info.

DEBUG - уровень отладочных сообщений На уровень DEBUG выводятся отладочные сообщения, формируемые методом Ember.Logger.debug.

DEPRECATION - уровень сообщений о подозрительных и устаревших участках исходного кода На уровень DEPRECATION выводятся предупреждения о подозрительных и устаревших участках исходного кода, формируемые методом Ember.Logger.warn, и включающие подстроку ‘DEPRECATION’.

Просмотр сообщений

Фреймворк Flexberry Ember включает в себя модель, а также роуты для отображени списковой формы и формы редактирования для логов.

Для подключения возможности просмотра записанных сообщений в приложение необходимо:

  • добавить необходимый роут в роутер, объявленный в файле /app/router.js:
this.route('i-i-s-caseberry-logging-objects-application-log-l');
  • добавить ссылку в свойство sitemap, объявленное в файле app/controllers/application.js для отображения соответствующего пункта меню:
{
  link: 'i-i-s-caseberry-logging-objects-application-log-l',
  caption: ...,
  title: ...,
  children: null
} 

По умолчанию на списке отображаются следующие столбцы:

  • Время - время создания сообщения;
  • Категория - ERROR, WARN, INFO, LOG, DEBUG, DEPRECATION;
  • Сервер - DNS бэкенда;
  • Браузер - информация о браузере, в котором было запущено клиентское приложение;
  • URL - адрес страницы, с которой было инициировано логирование сообщения;
  • Сообщение - текст сообщения.

Отображение списка сообщений из сервиса логирования

На списковой форме отображения логов имеются две предопределенные пользовательские настройки, их можно увидеть в меню соответствующей формы (эти настройки определяют отображаемые по умолчанию столбцы и сортировку):

  • Message
  • FormattedMessage

Доступные предопределенные настройки пользователя на форме просмотра сообщений лога

По умолчанию используется предопределённая настройка Message.

При необходимости можно использовать предопределённую настройку FormattedMessage для отображения столбца Форматированное сообщение, в котором для сообщений уровня ERROR может содержаться имя файла, строка, стек вызовов, место возникновения ошибки.

Отображение формы просмотра сообщений лога в режиме FormattedMessage

Настройки логирования в файле конфигурации

Конфигурация сервиса логирования устанавливается в файле environment.js.

Пример настроек сервиса логирования в приложении Flexberry Ember представлены ниже.

'use strict';

module.exports = function(environment) {
  ...
  let ENV = {
    ...
    APP: {
      ...
      // Log service settings.
      log: {
        // Flag: indicates whether log service is enabled or not.
        enabled: true,

        storeErrorMessages: true,
        storeWarnMessages: false,
        storeLogMessages: true,
        storeInfoMessages: false,
        storeDebugMessages: false,
        storeDeprecationMessages: false,
        storePromiseErrors: true,
        showPromiseErrors: true,
        errorMessageFilterActive: false,
      }
    }
  };
  ...
  return ENV;
};
  • enabled - флаг, определяющий, включён ли сервис логирования.
  • storeErrorMessages, storeWarnMessages, storeLogMessages, storeInfoMessages, storeDebugMessages, storeDeprecationMessages, storePromiseErrors - флаги, определяющие, осуществлять ли запись сообщений соответствующего уровня в базу данных приложения,
  • showPromiseErrors - флаг, определяющий, нужно ли вызывать исходный обработчик ошибок для промиса до записи соответствующего сообщения об ошибке в базу данных приложения,
  • errorMessageFilterActive - флаг, определяющий, нужно ли применть фильтры логов, заданные в свойстве errorMessageFilters.

Настройки логирования в коде приложения

Разработчик может динамически включать и отключать сервис логирования с испоьзованием оператора:

this.get('logService').set('enabled', true);

Для динамического включения или отключения логирования на требуемом уровне используются операторы:

this.get('logService').set('storeErrorMessages', true) // уровень ошибок
this.get('logService').set('storeWarnMessages', true) // уровень предупреждений;
this.get('logService').set('storeLogMessages', true) // уровень логов;
this.get('logService').set('storeInfoMessages', true) // уровень информационных сообщений;
this.get('logService').set('storeDebugMessages', true) // уровень отладочных сообщений;
this.get('logService').set('storeDeprecationMessages', true) // уровень сообщений о подозрительных и устаревших участках исходного кода.
this.get('logService').set('storePromiseErrors', true) // уровень сообщений об ошибках промисов.

Для фильтрации сообщений, которые записываются в логи, можно использовать свойство errorMessageFilters, которое представляет собой массив объектов следующего вида:

{ category: 'PROMISE', message: 'TransitionAborted' }

В свойстве catrgory объекта указывается требуемый уровень логов, а в свойстве message - фраза, которая может встречаться в логируемом сообщении. При этом если логируемое сообщение содержит указанную фразу, а также имеет указанный уровень лога, то запись в базу данных приложения соответствующего сообщения выполняться не будет.