Логирование событий#

Для логирования событий DataGrid поддерживает следующие библиотеки и фреймворки:

  • JUL (используется по умолчанию);

  • Log4j2;

  • JCL;

  • SLF4J.

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

Системное свойство

Описание

Значение по умолчанию

IGNITE_LOG_INSTANCE_NAME

Если данное свойство имеет значение set, DataGrid включает в логи название своего экземпляра

Не задано

IGNITE_QUIET

При значении false отключает "тихий" и включает расширенный (verbose) режим. В режиме verbose узел записывает в логи больше информации

true

IGNITE_LOG_DIR

Директория для записи log-файлов Datagrid

$IGNITE_HOME/ work/log

IGNITE_DUMP_THREADS_ON_FAILURE

При значении true данное свойство выдает в логах дампы потоков при появлении критической ошибки

true

Логирование по умолчанию#

По умолчанию DataGrid использует фреймворк java.util.logging (JUL). Если DataGrid запускается с использованием скрипта ignite.sh|bat из дистрибутива, то по умолчанию в качестве файла конфигурации используется $IGNITE_HOME/config/java.util.logging.properties, выдающий все сообщения в log-файлах в директории $IGNITE_HOME/work/log. Директория, используемая по умолчанию, может быть изменена при помощи системного свойства IGNITE_LOG_DIR.

При использовании DataGrid в приложении в качестве библиотеки, конфигурация логирования, используемая по умолчанию, включает в себя только обработчик консоли на уровне INFO. Собственный файл конфигурации можно использовать, изменив системное свойство java.util.logging.config.file.

Log4j2#

Внимание!

Чтобы использовать Log4j2, необходимо подключить модуль ignite-log4j2.

Для включения Log4j2, сконфигурируйте свойство gridLogger класса IgniteConfiguration:

  • XML

    <bean class="org.apache.ignite.configuration.IgniteConfiguration" id="ignite.cfg">
        <property name="gridLogger">
            <bean class="org.apache.ignite.logger.log4j2.Log4J2Logger">
                <!-- log4j2 configuration file -->
                <constructor-arg type="java.lang.String" value="log4j2-config.xml"/>
            </bean>
        </property>
    
        <!-- other properties -->
    
    </bean>
    
  • Java

    IgniteConfiguration cfg = new IgniteConfiguration();
    
    IgniteLogger log = new Log4J2Logger("log4j2-config.xml");
    
    cfg.setGridLogger(log);
    
    // Start a node.
    try (Ignite ignite = Ignition.start(cfg)) {
        ignite.log().info("Info Message Logged!");
    }
    

Путь к log4j2-config.xml может быть как абсолютным, так и локальным относительным путем к META-INF в classpath или к IGNITE_HOME. Пример файла конфигурации log4j2 можно найти в дистрибутиве ($IGNITE_HOME/config/ignite-log4j2.xml).

Примечание

Log4j2 поддерживает изменение конфигурации в ходе работы. Таким образом, изменения в файле конфигурации применяются без необходимости перезапуска приложения.

JCL#

Внимание!

Чтобы использовать Log4j2, необходимо подключить модуль ignite-jcl.

JCL лишь пересылает log-сообщения в соответствующую систему логирования, которая должна быть настроена должным образом. Например, для использования Log4j2, убедитесь, что необходимые библиотеки добавлены в свой classpath.

Подробнее — смотри официальную документацию JCL.

Для включения JCL, сконфигурируйте свойство gridLogger класса IgniteConfiguration:

  • XML

    <bean class="org.apache.ignite.configuration.IgniteConfiguration" id="ignite.cfg">
        <property name="gridLogger">
            <bean class="org.apache.ignite.logger.jcl.JclLogger">
            </bean>
        </property>
    
        <!-- other properties -->
    
    </bean>
    
  • Java

    IgniteConfiguration cfg = new IgniteConfiguration();
    
    cfg.setGridLogger(new JclLogger());
    
    // Start a node.
    try (Ignite ignite = Ignition.start(cfg)) {
        ignite.log().info("Info Message Logged!");
    }
    

SLF4J#

Внимание!

Чтобы использовать Log4j2, необходимо подключить модуль ignite-slf4j.

Для включения SLF4J, сконфигурируйте свойство gridLogger класса IgniteConfiguration:

  • XML

    <bean class="org.apache.ignite.configuration.IgniteConfiguration" id="ignite.cfg">
        <property name="gridLogger">
            <bean class="org.apache.ignite.logger.slf4j.Slf4jLogger">
            </bean>
        </property>
    
        <!-- other properties -->
    
    </bean>
    
  • Java

    IgniteConfiguration cfg = new IgniteConfiguration();
    
    cfg.setGridLogger(new Slf4jLogger());
    
    // Start a node.
    try (Ignite ignite = Ignition.start(cfg)) {
        ignite.log().info("Info Message Logged!");
    }
    

Подробнее — смотри официальную документацию SLF4J.

Скрытие конфиденциальной информации в логах#

В логах может отражаться содержание кеш-записей, системных свойств, настроек запуска и прочая информация, которая в некоторых случаях может быть конфиденциальной. Отображение такой информации в логах можно отключить, установив значение системного свойства IGNITE_TO_STRING_INCLUDE_SENSITIVE = false.

Пример команды:

./ignite.sh -J-DIGNITE_TO_STRING_INCLUDE_SENSITIVE=false`

Подробнее — смотри официальную документацию Apache Ignite.

Пример конфигурации логирования#

Для конфигурации логирования выполните шаги:

  1. Включите Log4j2, как описано в разделе Log4j2.

  2. При использовании стандартного файла конфигурации (ignite-log4j2.xml) раскомментируйте аппендер CONSOLE.

  3. В файле конфигурации log4j2 укажите путь к log-файлу. По умолчанию log-файлы сохраняются в директорию ${IGNITE_HOME}/work/log/ignite.log.

  4. Запустите узлы в verbose-режиме:

    • при использовании утилиты ignite.sh для запуска узлов — добавьте ключ -v;

    • если запуск узлов производится из Java-кода — используйте системную переменную IGNITE_QUIET=false.