Шов log4j учетные журналы - PullRequest
2 голосов
/ 06 июня 2010

В Seam, используя log4, я хотел бы, чтобы моя информация, предупреждение и ошибка всегда регистрировали имя зарегистрированного пользователя (если это так) для регистрации в любом сообщении журнала.

Будучи непротиворечивой вещью, я не хочу захватывать зарегистрированное имя пользователя и ставить префикс сообщения. поэтому я попытался заполнить log4j NDC, чтобы иметь его в качестве поля сообщения журнала. Нажав имя пользователя при успешном входе в систему:

NDC.push(credentials.getUsername());

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

Кто-нибудь знает подходящий способ сделать это?

1 Ответ

3 голосов
/ 07 июня 2010

Seam LoggingFilter полностью удовлетворяет ваши потребности

Привязывает имя пользователя, прошедшего проверку, к отображенному диагностическому контексту Log4j (MDC), на который ссылается буквенный шаблон% X {имя пользователя}

Но это включено, если Log4j находится в classpath - org.apache.log4j.Logger - И у вас есть включенный компонент Identity - org.jboss.seam.security.identity

Здесь приведен фрагмент кода LoggingFilter

HttpSession session = ((HttpServletRequest) servletRequest).getSession(false);
if (session != null) {
   Object attribute = session.getAttribute("org.jboss.seam.security.identity");
   if (attribute instanceof Identity) {
       Identity identity = (Identity) attribute;
       Credentials credentials = identity.getCredentials();

       String username = credentials != null ? credentials.getUsername() : null;
       if (username != null)
           MDC.put("username", username);
   }
}
...