やる夫がAOPを始めるそうです。

guiceでやってみました。

import java.util.Date;
import java.util.logging.*;
import org.aopalliance.intercept.*;
import com.google.inject.*;

import static com.google.inject.matcher.Matchers.*;

public class やる夫が {
    static final Logger logger = Logger.getLogger("yaruo");
    
    static final Foo AOPを始めるそうです = Guice.createInjector(new AbstractModule() {
            protected void configure() {
                bindInterceptor(any(), any(), new MethodInterceptor() {
                    @Override
                    public Object invoke(MethodInvocation methodInvocation) throws Throwable {
                        logger.info(methodInvocation.getMethod().getName());
                        try {
                            return methodInvocation.proceed();
                        } catch (Exception e) {
                            logger.severe(e.getClass().getSimpleName());
                            throw e;
                        }
                    }
                });
            }
        }).getInstance(Foo.class);
    
    public static void main(String[] args) throws Exception {
        FileHandler handler = null;
        try {
            handler = new FileHandler("やる夫がAOPを始めるそうです.log");
            handler.setFormatter(new やる夫Formatter());
            logger.addHandler(handler);
            
            やる夫が.AOPを始めるそうです.ほげほげ();
        } finally {
            if (handler != null) handler.close();
        }
    }
}

@ImplementedBy(FooImple.class)
interface Foo {
    public void ほげほげ();
}

class FooImple implements Foo {
    public void ほげほげ() {
        throw new RuntimeException();
    }
}

class やる夫Formatter extends Formatter {
    private int i = 0;
    
    @Override
    public String format(LogRecord record) {
        StringBuilder s = new StringBuilder();
        s.append(++i);
        s.append(" 名前:以下、名無しにかわりましてVIPがお送りします。 ");
        s.append(new Date(record.getMillis()));
        s.append("\n");
        if (record.getLevel().equals(Level.INFO)) {
            s.append(info(record));
        } else if (record.getLevel().equals(Level.SEVERE)) {
            s.append(severe(record));
        }
        s.append("\n");
        return s.toString();
    }
    
    public String info(LogRecord record) {
        StringBuilder s = new StringBuilder();
        s.append("     ____\n");
        s.append("   /      \  \n");
        s.append("  /  ─    ─\  \n");
        s.append("/    (●)  (●) \   \n");
        s.append("|       (__人__)    |    "+record.getMessage()+"・・・\n");
        s.append("/     ∩ノ ⊃  /  \n");
        s.append("(  \ / _ノ |  |  \n");
        s.append(".\ /“  /__|  |\n");
        s.append("  \ /___ /\n");
        return s.toString();
    }
    
    public String severe(LogRecord record) {
        StringBuilder s = new StringBuilder();
        s.append("      ______.      ━┓\n");
        s.append("    / ―   \    ┏┛\n");
        s.append("  /ノ  (●)  │   ・\n");
        s.append(". | (●)   ⌒) /     "+record.getMessage()+"\n");
        s.append(". |   (__ノ ̄ /\n");
        s.append("  \_    <´\n");
        s.append("    /´     `\\n");
        s.append("     |       |\n");
        s.append("     |       |\n");
        s.append("\n");
        s.append("             /)\n");
        s.append("           ///)\n");
        s.append("          /,.=゙''\"\n");
        s.append("   /     i f ,.r='\"-‐'つ____   細けぇ事はいいんだよ!!\n");
        s.append("  /      /   _,.-‐'~/⌒  ⌒\\n");
        s.append("    /   ,i   ,二ニ⊃( ●). (●)\\n");
        s.append("   /    ノ    il゙フ::::::⌒(__人__)⌒::::: \\n");
        s.append("      ,イ「ト、  ,!,!|     |r┬-|     |\n");
        s.append("     / iトヾヽ_/ィ\"\      `ー'´     /\n");
        return s.toString();
    }
}

むしろloggingの方に手間掛けてるしw

出力

1 名前:以下、名無しにかわりましてVIPがお送りします。 Mon Apr 13 17:43:34 JST 2009
     ____
   /      \  
  /  ─    ─\  
/    (●)  (●) \   
|       (__人__)    |    ほげほげ・・・
/     ∩ノ ⊃  /  
(  \ / _ノ |  |  
.\ /“  /__|  |
  \ /___ /

2 名前:以下、名無しにかわりましてVIPがお送りします。 Mon Apr 13 17:43:34 JST 2009
      ______.      ━┓
    / ―   \    ┏┛
  /ノ  (●)  │   ・
. | (●)   ⌒) /     RuntimeException
. |   (__ノ ̄ /
  \_    <´
    /´     `\
     |       |
     |       |

             /)
           ///)
          /,.=゙''"/
   /     i f ,.r='"-‐'つ____   細けぇ事はいいんだよ!!
  /      /   _,.-‐'~/⌒  ⌒\
    /   ,i   ,二ニ⊃( ●). (●)\
   /    ノ    il゙フ::::::⌒(__人__)⌒::::: \
      ,イ「ト、  ,!,!|     |r┬-|     |
     / iトヾヽ_/ィ"\      `ー'´     /