AspectJ를 사용하면 System.out을 호출하는 클래스의 서명을 쉽게 인쇄 할 수 있습니다.
TraceAspect에서 제공하는 간단한 예제는 다음과 같습니다. 중요한 부분은 클래스가 데모 패키지에 있고 System.out을 호출한다는 것입니다. aspect는 데모 패키지 깊이의 하위 패키지에있는 모든 클래스에서 System.out에 대한 모든 호출을 조언합니다.
이
@Aspect
public class TraceAspect {
@Pointcut("call(* java.io.PrintStream.*(..))")
public void sysoutPointcut() {
}
@Pointcut("within(demo..*)")
public void packagePointcut() {
}
@Before("sysoutPointcut() && packagePointcut()")
public void beforeSysoutCallInsideDemoPackage(JoinPoint joinPoint) {
System.out.print(joinPoint.getThis().getClass().getName() + ":"
+ joinPoint.getSourceLocation().getLine() + " - ");
}
}
DemoClass의 주요 방법을 실행의 출력은 다음과 같습니다하여 System.out을 호출하기 전에
package demo;
public class DemoClass {
public void demo() {
System.out.println("inside demo method..");
}
public static void main(String[] args) {
new DemoClass().demo();
}
}
는이 같은 화면을 추가 할 수 있습니다, 패키지 및 클래스 이름을 인쇄하려면 : -의 AspectJ 프로젝트로 변환>
이클립스와 AspectJ를 플러그인으로
demo.DemoClass:6 - inside demo method..
, 당신은 당신의 프로젝트를 마우스 오른쪽 단추로 클릭하고 구성을 클릭 할 수 있습니다. 위의 코드가 작동합니다.
@AspectJ 스타일 here으로 AspectJ에 대해 더 자세히 작성했습니다.
@SvrGuy : 모든 * System.out.println *을 적절한 로깅 호출로 바꿀 수 있습니다. 그런 다음 호출 된 곳을 알 수 있습니다. * System.out * 호출을 대체 할 수도 있습니다.이 호출은 * System.out.println * 호출에서 오는 클래스 이름을 추가하여 호출 할 수 있습니다. 둘 다 일부 스크립팅 언어를 사용하여 쉽게 수행 할 수 있습니다 (일부 스크립팅 기술은 모든 프로그래머에게 필수이지만 필자는 생략 함). 그곳에 가셔서, 모든 System.out.println을 100 KLOC 자바 코드베이스의 Un * x Bash 쉘 스크립트에 의해 자동으로 적절한 로깅으로 대체했습니다. – SyntaxT3rr0r
@SvrGuy : 쉘 스크립트를 사용하고 * find *, * sed * 및 * awk *와 같은 도구를 결합하는 것은 약간의 해킹이지만 아무 것도 잘못되지 않도록 제어 할 수 있습니다. 기본적으로 필자는 모든 * .java * 파일을 찾기 위해 * find *를 사용하고 각 파일 안에는 * System.out.println (* with * System.out.println (" .java_file_name "+"* 혹시 멋진 DVCS를 사용하고 있다면, 1M 초의 코드베이스를 초 단위로 복제하고 포크에서 최악의 범죄자를 찾아 "진짜"코드베이스에서 최악의 범죄자를 삭제하고, – SyntaxT3rr0r