I would like to add a log4j.Logger private static field into a multitude of
types. For instance, into all the types annotated with the @Path annotation.

This my current aspect code:

    public aspect LoggingAspect {
      public interface HttpHandlerType {}
      declare parents: (@Path *) implements HttpHandlerType;

      public Logger HttpHandlerType.Log = Logger.getLogger(getClass());

      pointcut httpHandlerMethods(HttpHandlerType o) :
within(HttpHandlerType+) &&
        execution(@(GET || PUT || POST || DELETE) public * *.*(..)) &&
this(o);

      before(HttpHandlerType o): httpHandlerMethods(o) {
        if (o.Log.isInfoEnabled()) {
          o.Log.info(logMethod(thisJoinPoint));
        }
      }

      after(HttpHandlerType o) returning (Object result):
httpHandlerMethods(o) {
        if (o.Log.isDebugEnabled()) {
          o.Log.debug(logMethod(thisJoinPoint, result));
        }
      }

      after(HttpHandlerType o) throwing (Exception e):
httpHandlerMethods(o) {
        if (o.Log.isEnabledFor(Level.ERROR)) {
          o.Log.error(logMethod(thisJoinPoint), e);
        }
      }

      private static String logMethod(JoinPoint jp) {
        ...
      }

      private static String logMethod(JoinPoint jp, Object result) {
        ...
      }
    }

The problem is that the Log field is an instance field, while it should be
a static one. But one cannot specify a static field inside an interface.

So my question is how to change the aspect implementation to make the Log a
static field?

Thanks.

-- 
Be well and prosper.
==============================
"There are two kinds of people.Those whose guns are loaded and those who
dig."
   ("The good, the bad and the ugly")
So let us drink for our guns always be loaded.
_______________________________________________
aspectj-users mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/aspectj-users

Reply via email to