AspectJ i logowanie

0

Cześć

Zastanawiam się nad takim rozwiązaniem
muszę w całej aplikacji dodać do mechanizmu logowania informacje u użytkowniku, potrzeba mi rozwiązania, które do każdego wywołania loggera np.

log.info("Loguję sobie info"), doda mi informacje o użytkowniku czyli np efektem wyjściowym będzie log w stylu "User : [email protected] , Loguję sobie info", dodatkowym problemem jest przekazanie informacji o użytkowniku do beanów ejb (Jeśli użytkownik nie jest zalogowany wtedy logujemy User : Annonymous)

Zastanawiam się nad użyciem AspectJ i dodaniu loggera nie w runtime tylko bezpośrednio w kodzie w trakcie kompilacji.

Jeśli chodzi o metody ejb to rozwiązaniem byłoby przekazanie przez aspekt do listy parametrów wywołania funkcji informacji o użytkowniku .

Czy coś takiego jest możliwe ? Dodam, że moja wiedza o aspectj jest tylko teoretyczna

0

Taka rzecz kiedys robilem robiac custom adaptera dla loger i w nim pobierajac aktualnego usera.
Twoje rozwiazanie wydaje sie skomplikowane i czasochłonne

0

Dodałem sobie coś takiego:

@Aspect
public class UserLoggerAspectJ {

    private static final Logger log = LoggerFactory.getLogger(UserLoggerAspectJ.class);

    @Pointcut("call(void org.slf4j.Logger.*(..))")
    public void beforeLog() {
    }

    @Around("beforeLog() &&  within(com.test.controllers..*)")
    public Object trace(ProceedingJoinPoint joinPoint) throws Throwable {

        final Object[] args = joinPoint.getArgs();

        if (args != null && args[0] != null) {
            final String login = SecurityUtils.getCurrentLogin();
            args[0] = "User : " + (login != null ? login : "Annonymous") + ", " + (args[0]);
        }
        final Object result = joinPoint.proceed(args);
        return result;
    }
}
 

No i oczywiście konfiguracja aspectj w trakcie kompilacji:

 <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>aspectj-maven-plugin</artifactId>
                <version>1.7</version>
                <configuration>
                    <complianceLevel>1.7</complianceLevel>
                    <source>1.7</source>
                    <target>1.7</target>                  
                </configuration>

                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

Działa super :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1