GridException Не удалось добавить неоперативный регистратор для Log4j при запуске GridGain

У меня проблемы с началом работы с gridgain, я использую файл конфигурации xml, который поставляется с примерами gridgain example-cache.xml (есть более простой файл конфигурации?). Когда я начинаю gridgain следующим образом, я получил GridException:

public static void main(String[] args) throws GridException, URISyntaxException {
  URL url = GridgainCache.class.getClassLoader().getResource("gridgain.xml");
  String filename = url.toURI().toString();
  System.out.println("Reading gridgain conf from: "+filename);
  Grid g = GridGain.start(filename);
  ...
}

Вот полная трассировка стека:

Exception in thread "main" class org.gridgain.grid.GridException: Failed to add no-op logger for Log4j.
For more information see:
    Troubleshooting:      http://bit.ly/GridGain-Troubleshooting
    Documentation Center: http://bit.ly/GridGain-Documentation

    at org.gridgain.grid.util.GridUtils.addLog4jNoOpLogger(GridUtils.java:7709)
    at org.gridgain.grid.kernal.GridGainEx.start(GridGainEx.java:714)
    at org.gridgain.grid.kernal.GridGainEx.start(GridGainEx.java:659)
    at org.gridgain.grid.kernal.GridGainEx.start(GridGainEx.java:522)
    at org.gridgain.grid.kernal.GridGainEx.start(GridGainEx.java:492)
    at org.gridgain.grid.GridGain.start(GridGain.java:314)
    at com.examples.gridgain.GridgainCache.main(GridgainCache.java:102)
Caused by: java.lang.IllegalArgumentException: argument type mismatch
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.gridgain.grid.util.GridUtils.addLog4jNoOpLogger(GridUtils.java:7706)
    ... 6 more

Нужно ли настраивать log4j? Я использую slf4j.

1 ответ

Решение

GridGain проверяет, есть ли классы Log4j, доступные в classpath, и пытается автоматически добавить Log4j logger, что в вашем случае приводит к ошибке из-за несоответствия версии Log4j.

Поскольку вы не можете переключиться на Log4j v1.2.17, поддерживаемый GridGain, вам следует настроить другой регистратор вручную. Я бы использовал мост SLF4j, соответствующий уже имеющейся версии Log4j (обратите внимание, что вам нужно будет добавить зависимость gridgain-slf4j):

<property name="gridLogger">
    <bean class="org.gridgain.grid.logger.slf4j.GridSlf4jLogger"/>
</property>

Другой вариант - использовать ведение журнала Java (дополнительные зависимости не требуются)

<property name="gridLogger">
    <bean class="org.gridgain.grid.logger.java.GridJavaLogger"/>
</property>
Другие вопросы по тегам