Я разместил это на другом форуме и хотел посмотреть, смогу ли я привлечь больше людей.
Я работаю над приложением, состоящим из различных веб-приложений Spring.
Скажем, у нас есть:
- ComponentA.jar
- ComponentB.jar
И файлы WAR:
- Foo.war (содержит Компонент A)
- Baa.war (содержит ComponentA &
ComponentB)
Мы используем 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
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. И 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
Заранее спасибо.