我在另一个论坛上发布了此消息,想知道我是否可以吸引更多人。
我正在开发一个由不同的Spring网络应用程序组成的应用程序。
说我们有:
和WAR文件:
我们使用Logback登录我们的调试日志。所以说应用程序的各个类具有以下记录器声明:
private static final Log log = LoggerFactory.getLogger(NAME_OF_WAR_FILE + "." + NAME_OF_CONTAINING_COMPONENT + "." + PACKAGE.CLASS_NAME);
所以例子:
package a.b.c;
public class SomeClass {
private static final Log log = LoggerFactory.getLogger("Foo.war" + "." + "ComponentA" + "." + SomeClass.class);
}
package x.y.z;
public class SomeOtherClass {
private static final Log log = LoggerFactory.getLogger("Baa.war" + "." + "ComponentA" + "." + SomeOtherClass .class);
}
假设war文件和组件的名称由属性设置,而不是硬编码。
是否可以使用可以执行以下操作的Aspect和建议(伪,因为我不确定是否可以完成):
@Aspect
public class TheAspect{
@Around("execution of a method")
public Object aroundSomething(ProceedingJoinPoint pjp){
Log log = get the log instance from the class that this advice is running on
if(log.isDebugEnabled())
// log something
Object o = pjp.proceed();
if(log.isDebugEnabled())
// log something else
return o;
}
}
这里的要点是使用类实例的日志写入日志文件,该类实例包含由建议拦截的方法。
该应用程序显示为由Foo.war和Baa.war组成的单个Web应用程序。 Foo.war和Baa.war都写入同一个日志文件。
示例:
2011-09-22 14:35:35.159 MDT,DEBUG,Foo.war.ComponentA.a.b.c.SomeClass,Hello World Debug message
2011-09-22 14:35:35.159 MDT,DEBUG,Baa.war.ComponentA.a.b.c.SomeClass,Hello World Debug message
2011-09-22 14:35:35.159 MDT,DEBUG,Baa.war.ComponentB.x.y.z.SomeOtherClass,Hello World Debug message
提前致谢。
答案 0 :(得分:0)
您可以在thisJoinPoint
方法中使用aroundSomething
。
获取班级名称:
Signature sig = thisJoinPoint.getSignature();
String className = sig.getDeclaringTypeName();
您还可以获取类对象:
Class<?> type = sig.getDeclaringType();
也许您可以使用该软件包来识别您的war文件:
Package pack type.getPackage();