Как заставить OpenEJB использовать slf4j? - PullRequest
3 голосов
/ 09 ноября 2010

Может ли кто-нибудь привести пример конфигурации pom.xml зависимостей, которая заставит OpenEJB использовать логирование slf4j вместо JCL (это то, что он использует сейчас, как я понимаю).Как настроить ведение журнала OpenEJB?

Ответы [ 6 ]

2 голосов
/ 31 марта 2011

Благодаря указателям Дэвида, это на самом деле довольно легко.Вам нужно только реализовать два предложения: - Slf4jLogStreamFactory - Slf4jLogStream

и затем установить свою фабрику: System.setProperty ("openejb.log.factory", "de.glauche.Slf4jLogStreamFactory");

package de.glauche;

import org.apache.openejb.util.LogCategory;
import org.apache.openejb.util.LogStream;
import org.apache.openejb.util.LogStreamFactory;

public class Slf4jLogStreamFactory implements LogStreamFactory {

    @Override
    public LogStream createLogStream(LogCategory logCategory) {
        return new Slf4jLogStream(logCategory);
    }

}

и Slf4jLogStream:

package de.glauche;

import org.apache.openejb.util.LogCategory;
import org.apache.openejb.util.LogStream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Slf4jLogStream implements LogStream {
    private Logger log;

    public Slf4jLogStream(LogCategory logCategory) {
        log = LoggerFactory.getLogger(logCategory.getName());
    }

    @Override
    public boolean isFatalEnabled() {
        return log.isErrorEnabled();
    }

    @Override
    public void fatal(String message) {
        log.error(message);
    }

    @Override
    public void fatal(String message, Throwable t) {
        log.error(message,t);
    }
        ... (overwrite the remaining methods like this)

С этим я получаю весь вывод, красиво отформатированный в моем логгере с помощью slf4j:)

2 голосов
/ 10 ноября 2010

У нас есть поддержка:

Новые реализации LogStreamFactory могут быть подключены путем установки имени класса в качестве значения системного свойства openejb.log.factory.

Не стесняйтесь копировать один из существующих impls и обновлять для JCL илиSLF4J.Проект всегда принимает новых коммиттеров, если у вас есть желание взломать и другие вещи!

1 голос
/ 25 ноября 2010

Вот как я заставил OpenEJB использовать внешнее ведение журнала:

[...]
@Before
public void before() throws Exception {
  System.setProperty("openejb.logger.external", "true");
  InitialContext ctx = new InitialContext();
}
[...]

Может быть, возможно перенести это системное свойство в какой-то глобальный ресурс, например pom.xml?

0 голосов
/ 30 января 2014

Если вы выполняете через exec плагин Maven, попробуйте это:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.2.1</version>
    <configuration>
       <mainClass>your Mainclass here</mainClass>
       <systemProperties>
          <systemProperty>
             <key>openejb.log.factory</key>
             <value>slf4j</value>
          </systemProperty>
       </systemProperties>
    </configuration>
 </plugin>
0 голосов
/ 10 ноября 2010

Не эксперт по Maven, но, насколько я понимаю, вам нужно:

<dependency>
    <groupId>org.slf4j</groupId>
        <artifactId>jul-to-slf4j</artifactId>
    <version>1.6.1</version>
</dependency>

Если OpenEJB не поддерживает JCL, добавлять эту зависимость бессмысленно, поэтому используйте JUL или Log4j.

Более подробную информацию можно найти в репозитории Maven .

. Если вы действительно хотите использовать мост JCL, используйте это:

<dependency>
    <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
    <version>1.6.1</version>
</dependency>
0 голосов
/ 09 ноября 2010

Если вы добавите зависимости API и JCL, то ваше ведение журналов с использованием API SLF4J будет направлено на журналы JCL по умолчанию.

Это то, что вы хотите? Или вы хотите использовать какой-нибудь другой сервер для регистрации?

 <dependencies>
   <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.6.1</version>
    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-jcl</artifactId>
        <version>1.6.1</version>
    </dependency>
</dependencies>
...