Java 实现AOP方面时日志记录不起作用?

Java 实现AOP方面时日志记录不起作用?,java,logging,log4j,spring-aop,Java,Logging,Log4j,Spring Aop,我正在尝试使用log4j配置的面向方面编程来实现日志记录。我的需求是独一无二的,所以我坚持使用相同的技术。在下面的代码中告诉我为什么日志记录不起作用,即使我可以看到System.out.println给出适当的结果 注意:log4j属性文件没有问题,如果单独调用,其工作正常 package com.test.media.core.logger; import org.apache.commons.logging.Log; import org.apache.commons.logging.Lo

我正在尝试使用log4j配置的面向方面编程来实现日志记录。我的需求是独一无二的,所以我坚持使用相同的技术。在下面的代码中告诉我为什么日志记录不起作用,即使我可以看到System.out.println给出适当的结果

注意:log4j属性文件没有问题,如果单独调用,其工作正常

package com.test.media.core.logger;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
import org.springframework.util.StopWatch;

@Component
@Aspect
public class LoggingAspect {

    //private final Log log = LogFactory.getLog(this.getClass());
    private static final Log log = LogFactory.getLog(LoggingAspect.class);

    @Before("execution(* com.test.media.core.*.*.*(..))")
    public void logBefore(JoinPoint joinPoint) {
        Log log = LogFactory.getLog(joinPoint.getClass());
        System.out.println("logBefore is running " +joinPoint.getClass());
        log.debug("medthod  " + joinPoint.getSignature().getName()+"() is hijacked for execution");
        log.debug("******");
    }

    @After("execution(* com.test.media.core.*.*.*(..))")
    public void logAfter(JoinPoint joinPoint) {
        log.debug("medthod  " + joinPoint.getSignature().getName()+"() log After execution");
        log.debug("******");

    }

    @AfterReturning(pointcut = "execution(* com.test.media.core.*.*.*(..))", returning = "result")
    public void logAfterReturning(JoinPoint joinPoint, Object result) {

        log.debug("medthod  " + joinPoint.getSignature().getName()+"() log After Returning");
        log.debug("Method returned value is : " + result);
        log.debug("******");

    }

    @AfterThrowing(pointcut = "execution(* com.test.media.core.*.*.*(..))", throwing = "error")
    public void logAfterThrowing(JoinPoint joinPoint, Throwable error) {

        log.debug("medthod  " + joinPoint.getSignature().getName()+"() is thowing some exception");
        log.debug("Exception : " + error);
        log.debug("******");

    }

    @Around("execution(* com.test.media.core.*.*.*(..))")
    public Object logTimeMethod(ProceedingJoinPoint joinPoint) throws Throwable {

            StopWatch stopWatch = new StopWatch();
            stopWatch.start();

            Object retVal = joinPoint.proceed();

            stopWatch.stop();

            StringBuffer logMessage = new StringBuffer();
            logMessage.append(joinPoint.getTarget().getClass().getName());
            logMessage.append(".");
            logMessage.append(joinPoint.getSignature().getName());
            logMessage.append("(");
            // append args
            Object[] args = joinPoint.getArgs();
            for (int i = 0; i < args.length; i++) {
                logMessage.append(args[i]).append(",");
            }
            if (args.length > 0) {
                logMessage.deleteCharAt(logMessage.length() - 1);
            }

            logMessage.append(")");
            logMessage.append(" execution time: ");
            logMessage.append(stopWatch.getTotalTimeMillis());
            logMessage.append(" ms");
            log.debug(logMessage.toString());
            return retVal;
    }
}

谢谢你的建议。我得到了解决方案,基本上这不是一个java代码问题。由于垃圾pom条目,发生了此未知行为。工作pom条目如下所示:

    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.0</version>
    </dependency>

您使用的是一个执行切入点,所以很有可能。getClass返回的类与您预期的不同,可能是aspect类,而不是“weaved”类。我会检查它是否具有您期望的值…尝试私有记录器log=LoggerFactory.getloggerloggingapect。class@Jango您可以在代码段中看到,我尝试了所有方法,但没有成功。@ORiLENTZ我尝试了joinPoint.getTarget.getClass.getName,但没有结果。。您尝试了哪些方法,哪些“不起作用”?你也可以添加测试类吗?
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.0</version>
    </dependency>