【发布时间】:2012-02-04 10:17:43
【问题描述】:
我正在尝试做一些非常简单的事情。我有一个 com.mypackage.Logger 记录器类,我想将其实例化语句“插入”到每个类中,如下所示:private static Logger LOG = new Logger(Class.class)。然后,我想记录项目中每个函数的每个入口和出口实例。这是我的方面:
public aspect LoggingAspect pertypewithin(*) {
private static Logger LOG;
pointcut classes(): within(com.mypackage..*) && !within(com.mypackage.Logger) && !within(com.mypackage.LoggingAspect);
pointcut functions(): classes() && (execution(* *(..)) || execution(new(..)));
before(): staticinitialization(*) && classes() {
LOG = new Logger(thisJoinPointStaticPart.getSignature().getDeclaringType());
}
before() : functions() {
LOG.trace("ENTER " + thisJoinPoint.getSignature().toLongString());
}
after() returning(@SuppressWarnings("unused") Object ret) : functions() {
LOG.trace("EXIT " + thisJoinPoint.getSignature().toLongString());
}
几乎一切正常。我得到了正确的输入和存在的日志语句,完全符合预期。问题是与每个日志条目关联的日志记录类不正确。我正在使用 log4j,每个日志条目的格式如下:
[TRACE](日期和时间戳)(记录类名)(线程名)(一些记录语句)
问题在于 Logger 实例化中使用的日志类与 thisJoinPoint.getSignature().getDeclaringTypeName() 指示的正确类不匹配。
我知道我在静态 Logger 变量方面做得不对,所以请帮助我。谢谢你的时间!!!
【问题讨论】: