@Inject Logger (CDI) в EJB с помощью jBoss

Я пытаюсь просто вставить мой Logger в мой EJB:

@Inject
Logger logger;

Но я получаю следующую ошибку

Caused by: org.jboss.weld.exceptions.AmbiguousResolutionException: WELD-001318 Cannot resolve an ambiguous dependency between 
[Producer Method [Logger] with qualifiers [@Any @Default] declared as [[method] @Produces public be.fgov.health.ecad.Resource.createLogger(InjectionPoint)], 
Producer Method [Logger] with qualifiers [@Any @Default] declared as [[method] @Produces public be.fgov.health.ecad.Resource.createLogger(InjectionPoint)]]

Я действительно не знаю, что это может быть? Из того, что я вижу, нет ничего плохого в следующем классе? Я не понимаю, почему jBoss говорит, что есть неоднозначная зависимость..

@Dependent
public class Resource {

    @Produces
    public Logger createLogger(final InjectionPoint ip) {
        return Logger.getLogger(ip.getMember().getDeclaringClass());
    }

}

1 ответ

Вам не нужно реализовывать это самостоятельно, для этого варианта использования есть расширение сварного шва:

Weld-Logger

Из документации:

Добавление журналирования в ваше приложение стало еще проще благодаря простому внедрению объекта регистратора в любой компонент CDI. Просто аннотируйте член типа org.jboss.weld.log.Log с помощью аннотации квалификатора @Logger, и соответствующий объект logger будет внедрен в любой экземпляр компонента.

import org.jboss.weld.annotation.Logger;
import org.jboss.weld.log.Log;

public class Checkout {

    private @Inject @Logger Log log;


    public void invoiceItems() {

        ShoppingCart cart;

        ...

        log.debug("Items invoiced for {0}", cart);
    }
 }
Другие вопросы по тегам