log4j MDC и EJB
От: yanich  
Дата: 02.02.09 06:16
Оценка:
Доброго времени суток ...

Есть Facade — EJB Stateless Bean:


@Stateless(name = "TestFacade")
public class TestFacadeBean implements TestFacade, TestFacadeLocal {

 private static final Logger logger = Logger.getLogger(TestFacadeBean.class);

 public void hello() {
   logger.info("Hello world");
 }
}




Есть Web слой с фильтром:


public class AuthFilter implements Filter {
    private FilterConfig filterConfig = null;

    private static final Logger logger = Logger.getLogger(AuthFilter.class);


    public void init(FilterConfig filterConfig) {
        this.filterConfig = filterConfig;
    }

    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, 
                         FilterChain filterChain) {
        MDC.put("user", getAuthUser());
    }
}



Веб приложение общается с EJB посредством локального интерфейса TestFacadeLocal...

Логгирование идет по каждому пользователю %X{user} ...

Так вот вопрос — не будут ли смешиваться логи разных пользователей?
Re: log4j MDC и EJB
От: leokom Украина http://neformatc.blogspot.com
Дата: 28.02.09 18:58
Оценка:
Y>Так вот вопрос — не будут ли смешиваться логи разных пользователей?
MDC работает на уровне потоков. Так что если запросы будут обрабатываться в разных потоках — смеси не будет. Ну а если в одном — думаю будет. Вот как это контролировать — не знаю.

Еще интересно (ну это уже другая тема) так как это stateless-bean то вполне возможно что строка
 private static final Logger logger = Logger.getLogger(TestFacadeBean.class);


будет выполняться при каждом вызове через локальный интерфейс (так как EJB контейнер не гарантирует сохранение инстанса stateless-бинов между двумя вызовами!)
Re[2]: log4j MDC и EJB
От: GarryIV  
Дата: 02.03.09 08:25
Оценка: +1
Здравствуйте, leokom, Вы писали:

L>Еще интересно (ну это уже другая тема) так как это stateless-bean то вполне возможно что строка

L>
L> private static final Logger logger = Logger.getLogger(TestFacadeBean.class);
L>


L>будет выполняться при каждом вызове через локальный интерфейс (так как EJB контейнер не гарантирует сохранение инстанса stateless-бинов между двумя вызовами!)


Оно же статик при чем тут инстанс?
WBR, Igor Evgrafov
Re[3]: log4j MDC и EJB
От: leokom Украина http://neformatc.blogspot.com
Дата: 02.03.09 19:17
Оценка:
L>>
L>> private static final Logger logger = Logger.getLogger(TestFacadeBean.class);
L>>


GIV>Оно же статик при чем тут инстанс?


Согласен я был неправ, статик не заметил.
Эт видимо потому что под влиянием статьи про антипаттерны
http://www.odi.ch/prog/design/newbies.php#22
я всегда создаю logger как член инстанса а не статический (кроме утилитных классов).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.