Афоризм
Если больной очень хочет жить, то врачи бессильны.
Фаина Раневская
Последние статьи

 • платформа JaBricks
Платформа OSGi-приложения JaBricks
 • уроки JaBricks
Учебные примеры изучения платформы Jabricks
 • бандл 'О программе'
Модуль представления инфо о программе
 • бандл form-locale
Модуль определения языка локализации приложения
 • бандл util-db
Модуль взаимодействия с СУБД
 • бандл db-connection
Модуль подключения к серверу БД
 • бандлы JaBricks
Бандлы приложения JaBricks

Модуль протоколирования сообщений

Модуль util-logger платформы Jabricks предназначен для протоколирования сообщений бандлов. Сообщения могут выводиться как в консоль, так и записываться во внешние файлы директории logs, которая создается модулем автоматически. Для логирования сообщений бандлов необходимо установить соответствующие параметры в файле инициализации jabrick.ini :

• log.console— флаг вывода сообщений бандлов в консоль;
• log.file — флаг записи сообщений в файл;
• log.level — уровень сообщений.

Если флаги в файле инициализации не определены, то используются их значения по умолчанию (false), т.е. флаги считаются «сброшенными» и сообщения не логируются. Также не логируются сообщения, если не установлены уровни сообщений.

Уровни сообщений

В файле инициализации можно использовать следующие значения уровней сообщений : DEBUG, INFO, WARNING, ERROR, SQL, OSGi. Можно логировать сообщения нескольких уровней; для этого следует перечислить их в параметре log.level, используя символ запятой ',' в качестве разделителя.

Модуль util-logger непосредственно взаимодействует с модулем реализации механизма логирования org.apache.felix.log, который должен быть включен в приложение. В org.apache.felix.log определены четыре целочисленных уровня сообщений интерфейса org.osgi.service.log.LogService :

  1. LogService.LOG_DEBUG
  2. LogService.LOG_INFO
  3. LogService.LOG_WARNING
  4. LogService.LOG_ERROR

В базовом интерфейсном модуле gui-widgets для разработчиков добавлены еще два уровня сообщений :

5. LOG_LEVEL_SQL
6. LOG_LEVEL_OSGi

При разработке бандлов необходимо использовать соответствующие уровни сообщений, определенные либо в интерфейсе org.osgi.service.log.LogService, либо в модуле gui-widgets (при его наследовании). Т.е. модуль util-logger логирует сообщения с уровнями от 1 до 6 классифицируя их соответствующим обозначением. Все сообщения, связанные с работой БД следует логировать с уровнем LOG_LEVEL_SQL. Сообщения фреймворка, связанные с инсталляцией бандлов, перевода бандлов из одного состояния в другое (старт, останов и т.д.), а также регистрация сервисов, логируются с уровнем LOG_LEVEL_OSGi.

Протоколирование сообщений в бандлах

Чтобы использовать модуль util-logger для протоколирования сообщений в бандлах необходимо :

  • включить пакеты org.osgi.service.event.* в секцию <Import-Package> манифеста бандла MANIFEST.MF;
  • в коде бандла подключиться к сервису логирования org.osgi.service.log.LogService;
  • при останове бандла отключиться от сервиса.

Следующий листинг демонстрирует определение зависимости org.apache.felix.eventadmin в проектном файле pom.xml, необходимой для протоколирования во время разработки бандла, и включение соответствующих пакетов в секцию <Import-Package> манифеста бандла MANIFEST.MF.

Листинг
<dependencies>
      ...
      <dependency>
          <groupId>org.apache.felix</groupId>
          <artifactId>
              org.apache.felix.eventadmin
          </artifactId>
          <version>1.2.2</version>
          <scope>provided</scope>
      </dependency>
      ...
</dependencies>
...
<Import-Package>
      ...
      org.osgi.service.event.*,
      ...
</Import-Package>

Пример протоколирования сообщений

Ниже представлен код активатора бандла, который можно использовать при разработке модуля для подключения к сервису логирования и отправки ему сообщений. В методе start вызывается метод регистрации сервиса логирования и отправляется сообщение. В методе registerService используется утилитный класс OSGi org.osgi.util.tracker.ServiceTracker для подключения к сервису логирования. Подробнее о сервисах взаимодействия бандлов представлено здесь. При останове бандла (метод stop) необходимо отключиться от сервиса логирования.

Листинг
import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleActivator;

import org.osgi.service.log.LogService;
import org.osgi.util.tracker.ServiceTracker;

public class ModuleActivator implements BundleActivator
{
    ServiceTracker<Object, Object>  svcTracker;
    LogService                      logService;

    @Override
    public void start(final BundleContext context) 
                                          throws Exception {
        // ...
        registerService(context);
        logMessage (LogService.LOG_INFO, "Module start");
    }

    @Override
    public void stop(final BundleContext context) 
                                         throws Exception {
        if(logService != null) {
            // close the service tracker
            logService.close();
            logService = null;
        }
    }

    public void registerService(BundleContext context) 
    {
        String  cls = LogService.class.getName();
        svcTracker = new ServiceTracker<Object, Object> (
                                       context, cls, null);
        svcTracker.open();

        // grab the service
        logService = (LogService) svcTracker.getService();
    }

    public void logMessage (final int level, 
                           final String message) {
        if (logService != null)
            logService.log(level, message);
    }
}

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

Пример вывода сообщений в консоль

Формат вывода сообщений в консоль и файл идентичен. Ниже представлены сообщения одного «сеанса» работы приложения, выполненные в Уроке 10. Для наглядности и понимания, что делает приложение и интегрированный в него фреймворк Felix в листинг вставлены комментарии, которые отсутствуют в реальном протоколе.

После запуска приложения выполняется инсталляция бандлов и старт отдельных модулей, определенных в файле инициализации bundles.ini. Далее в приложении выполняются следующие действия :

  1. Подключение к серверу БД (модуль form-connection).
  2. Открытие справочника валюты и внесение изменений (модуль list-currencies).
  3. Открытие формы настройки локализации и изменение текущей Locale (модуль list-locale)
  4. Отключение от сервера БД модулем form-connection.
  5. Завершение работы.

Модуль util-logger фиксирует все действия фреймворка (OSGi) и сообщения бандлов (INFO, SQL).

Консоль

11:48:45  START  ~~~~~ Framework CREATED ~~~~~


#~~~~~ Инсталляция бандлов ~~~~~

10:58:38  START ~~~~~ Framework CREATED ~~~~~
10:58:40  START Framework init
10:58:40  START Framework start
10:58:40  INFO  Install bundles
10:58:40  OSGi  org.jabricks.jdialog.base-jdialog : \
                                                  INSTALLED
10:58:40  OSGi  org.jabricks.jframe.base-jframe : INSTALLED
10:58:40  OSGi  org.jabricks.jpanel.base-jpanel : INSTALLED
10:58:41  OSGi  org.jabricks.connection.db-connection : \
                                                  INSTALLED
10:58:41  OSGi  org.jabricks.dbobjects.db-objects : \
                                                  INSTALLED
10:58:41  OSGi  org.jabricks.locale.form-locale : INSTALLED
10:58:41  OSGi  org.jabricks.menu.gui-menu :      INSTALLED
10:58:41  OSGi  org.jabricks.toolbar.gui-toolbar : \
                                                  INSTALLED
10:58:41  OSGi  org.jabricks.widgets.gui-widgets : \
                                                  INSTALLED
10:58:42  OSGi  org.jabricks.currencies.list-currencies : \
                                                  INSTALLED
10:58:42  OSGi  org.jabricks.exchange.list-exchange : \
                                                  INSTALLED
10:58:42  OSGi  org.jabricks.measures.list-measures : \
                                                  INSTALLED
10:58:42  OSGi  derby :                           INSTALLED
10:58:42  OSGi  org.apache.felix.eventadmin :     INSTALLED
10:58:42  OSGi  org.apache.felix.log :            INSTALLED
10:58:42  OSGi  org.jabricks.templates.templ-jframe : \
                                                  INSTALLED
10:58:43  OSGi  org.jabricks.db.util-db-derby :   INSTALLED
10:58:43  OSGi  org.jabricks.logger.util-logger : INSTALLED
10:58:43  OSGi  org.jabricks.resources.util-resources : \
                                                  INSTALLED

#~~~~~ Старт модуля логирования ~~~~~
10:58:47  OSGi  org.jabricks.logger.util-logger : STARTED

#~~~~~ Старт модуля авторизации ~~~~~
10:58:47  OSGi  org.jabricks.db.util-db-derby :   RESOLVED
10:58:47  OSGi  org.jabricks.connection.db-connection : \
                                                  RESOLVED
10:58:47  OSGi  org.jabricks.jdialog.base-jdialog : \
                                                  RESOLVED
10:58:47  OSGi  derby :                           RESOLVED

10:58:47  OSGi  ServiceEvent REGISTERED : \
                                     'jabricks/LocaleEvent'
10:58:47  OSGi  org.jabricks.connection.db-connection : \
                                                   STARTED

#~~~~~ Подключение к серверу БД ~~~~~

11:00:00  SQL    DAODerby : RegisterDriverManager
11:00:03  SQL    org.jabricks.db.DAODerby.createConnection \
                                          connection created

#~~~~~ Публикация сообщения  'jabricks/DBConnect' ~~~~~
11:00:03  SQL    send 'jabricks/DBConnect' : CONNECT

#~~~~~ Останов модуля авторизации ~~~~~
11:00:03  OSGi   ServiceEvent UNREGISTERING : \
                                     'jabricks/LocaleEvent'
11:00:03  OSGi   org.jabricks.connection.db-connection : \
                                                   STOPPED

#~~~~~ Старт справочника валюты ~~~~~

11:00:43  OSGi   org.jabricks.currencies.list-currencies :\
                                                   RESOLVED
11:00:44  OSGi   ServiceEvent REGISTERED : \
                                     'jabricks/LocaleEvent'
11:00:44  OSGi   ServiceEvent REGISTERED : \
                                      'jabricks/DBConnect'
11:00:44  OSGi   org.jabricks.currencies.list-currencies :\
                                                    STARTED

#~~~~~ Внесение изменений в справочник валюты ~~~~~
11:00:52  SQL    Record in the table \
                      'jabricks.jbt_currencies' was updated

#~~~~~ Останов справочника валюты ~~~~~
11:03:22  OSGi   ServiceEvent UNREGISTERING : \
                                     'jabricks/LocaleEvent'
11:03:22  OSGi   ServiceEvent UNREGISTERING : \
                                     'jabricks/DBConnect'
11:03:22  OSGi   org.jabricks.currencies.list-currencies :\
                                                    STOPPED

#~~~~~ Изменение текущей Locale ~~~~~

#~~~~~ Старт модуля form-locale ~~~~~
11:09:40  OSGi   org.jabricks.locale.form-locale : RESOLVED
11:09:40  OSGi   org.jabricks.locale.form-locale : STARTED

#~~~~~ Получение сообщения 'jjabricks/LocaleEvent' ~~~~~
11:09:44  INFO   org.jabricks.templates.templ-jframe \
                  get event on topic : jabricks/LocaleEvent

#~~~~~ Публикация сообщения 'jjabricks/LocaleEvent' ~~~~~
11:09:45  INFO   send 'jabricks/LocaleEvent' : english

#~~~~~ Останов модуля form-locale ~~~~~
11:09:45  OSGi   org.jabricks.locale.form-locale : STOPPED

#~~~~~ Старт модуля db-connection ~~~~~

11:11:20  OSGi   ServiceEvent REGISTERED : \
                                    'jabricks/LocaleEvent'
11:11:20  OSGi   org.jabricks.connection.db-connection : \
                                    STARTED

#~~~~~ Отключение от сервера БД ~~~~~
11:11:23  SQL    org.jabricks.db.DAODerby.disconnect

#~~~~~ Публикация сообщения 'jabricks/DBConnect' ~~~~~
11:11:23  SQL    send 'jabricks/DBConnect' : DISCONNECT

#~~~~~ Останов модуля db-connection ~~~~~
11:11:23  OSGi   ServiceEvent UNREGISTERING : \
                                    'jabricks/LocaleEvent'
11:11:23  OSGi   org.jabricks.connection.db-connection : \
                                    STOPPED

#~~~~~ Останов программы (главного фрейма) ~~~~~
11:11:56  OSGi   ServiceEvent UNREGISTERING : \
                               'jabricks/LocaleEvent'
11:11:56  OSGi   ServiceEvent UNREGISTERING : \
                               'jabricks/Container/Request'
 

Примечание : в представленных выше сообщениях символ переноса '\' делит строку на две части.

Зависимости

Модуль логирования сообщений util-logger использует следующие бандлы :

  • бандл util-resources, от которого получает значения флагов протоколирования (log.console, log.file, log.level);
  • бандл логирования сообщений org.apache.felix.log фреймворка Felix.
  • Felix-фреймворк org.osgi.framework, включенный в модуль JaBricks.

Подключение модуля util-logger

Для подключения модуля util-logger в приложение JaBricks необходимо :

  • разместить модуль в поддиректории «configuration/bundles/»;
  • внести в файл инициализации бандлов «bundles.ini» наименование модуля с атрибутом старта : util-logger-1.0.0.jar@start;

Примечание : атрибут @start определяет необходимость старта модуля после «инсталляции» для начала протоколирования сообщений бандлами приложения.

GAV параметры модуля util-logger имеют следующие значения :

• groupId : org.jabricks.logger
• artifactId : util-logger
• version : 1.0.0

Подробнее о включении модуля в приложение JaBricks представлено здесь.

Скачать util-logger

Рассмотренный на странице модуль с компонентами формирования графического интерфейса util-logger упакован в архивный файл util-logger-1.0.0.zip (11.1 Кб).

  Рейтинг@Mail.ru