/**************************************************************************************
* Copyright (c) Jonas Bon�r, Alexandre Vasseur. All rights reserved. *
* http://aspectwerkz.codehaus.org *
* ---------------------------------------------------------------------------------- *
* The software in this package is published under the terms of the LGPL license *
* a copy of which has been included with this distribution in the license.txt file. *
**************************************************************************************/
package examples.logging;
import org.codehaus.aspectwerkz.joinpoint.StaticJoinPoint;
/**
* This aspect shows how to implement logging modules using Log4j, 1.4 Logger etc.
* (currently showing the use of 1.4 Logger API).
*
* @author <a href="mailto:jboner@codehaus.org">Jonas Bon�r </a>
*/
public class LoggerIdiom {
/**
* @Around("methodToLog && target(loggable)")
*/
public Object log(StaticJoinPoint jp, Loggable loggable) throws Throwable {
loggable.getLog().log(Level.ALL, "entering " + jp.getSignature());
Object result = jp.proceed();
loggable.getLog().log(Level.ALL, "exiting " + jp.getSignature());
return result;
}
/**
* @Mixin(
* pointcut="loggableClasses",
* deploymentModel="perClass"
* )
*/
public static class LoggableImpl implements Loggable {
private final Logger LOG;
public LoggableImpl(Class targetClass) {
LOG = Logger.getLogger(targetClass.getName());
}
public Logger getLog() {
return LOG;
}
}
public static interface Loggable {
Logger getLog();
}
// some backport of Java 1.4 logging so that the sample can run on 1.3
//TODO : else move to jdk15 samples
static class Level {
static final Level ALL = new Level();
}
static class Logger {
private static Logger SINGLETON = new Logger();
static Logger getLogger(String name) {
return SINGLETON;
}
void log(Level level, String m) {
System.out.println("examples.logging.Logger : " + m);
}
}
}