2010-11-09 1 views
3

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

смотри также How to configure OpenEJB logging?

+1

Возможно, вы захотите добавить тег maven на этот вопрос –

+0

@kar ianna Я пробовал, но 5 тегов - максимум за вопрос – yegor256

+0

хорошо вы узнаете что-то повседневное :-) –

ответ

1

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

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

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

0

Если добавить API и JCL зависимостей, то ваш каротаж с использованием SLF4J API будут получать направлены журналы 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> 
+0

Точно наоборот. Мне нужно, чтобы все записи JCL были перенаправлены на SLF4J. – yegor256

2

Мы имеем поддержку:

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

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

+0

Не могли бы вы привести пример того, что именно мне нужно изменить, и где? Я попытался добавить 'openejb.log.factory = org.apache.openejb.util.Log4jLogStreamFactory' в' jndi.properties', без эффекта :( – yegor256

+0

Реализация log4j является стандартной по умолчанию, поэтому ее установка явно не изменится что-то. Чтобы заставить его использовать что-то другое, кроме Log4j или java.util.logging, вам придется написать новый LogStreamFactory и установить его с помощью этого свойства. –

+0

Если log4j является реализацией по умолчанию, почему мои 'log4j.properties' проигнорирован тогда? – yegor256

0

Не эксперт Maven, но из моего понимания, вы хотите:

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

Если OpenEJB не поддерживает JCL, было бы бессмысленно, чтобы добавить эту зависимость, чтобы идти с ИЮЛ или Log4j.

Дополнительную информацию можно получить по адресу: Maven repository.

Только в случае, если вы действительно хотите использовать JCL мост, используйте:

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

Благодаря указателям Давида это на самом деле довольно легко. Вам необходимо реализовать только две clases: - 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) 

С этим я получаю все выходные красиво отформатированный в моем Logback регистратору через SLF4J :)

+0

Это замечательно! Если вы прикрепляете патч к jira , мы можем проверить его. https://issues.apache.org/jira/browse/OPENEJB –

+1

См. https://issues.apache.org/jira/browse/OPENEJB-1408 – mglauche

0

Если вы выполняете с помощью Maven-х exec, попробуйте следующее:

<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> 
Смежные вопросы