どこかのライブラリがエラー出してるっぽいんだけど、誰が出してるのかさっぱりわからない時

なんかしらないけどやたらとエラーメッセージがでるが、どこの誰が出しているのかさっぱりわからないという時、ありますよね。

そんな時は諦めて jar の中を grep してしまうのがいいかもしれないですね。

    find . -name '*.jar' -exec zipgrep 'Woot! something failed' {} \;

System.out を差し替えてしまうというのもひとつの手かも。

    class Foo extends PrintStream {
        @Delegate PrintStream ps;

        public Foo(PrintStream ps) {
            super(ps, true)
            this.ps = ps;
        }
    }

    def decorateMethodsWithLogging(clazz) {
        def mc = clazz.metaClass

        mc.invokeMethod = { String name, args ->
            println "===========> $name, args = $args <=========="
            org.codehaus.groovy.runtime.StackTraceUtils.sanitize(new Exception()).printStackTrace()
            println "===========< $name, args = $args >=========="
            return mc.getMetaMethod(name, args).invoke(delegate, args)
        }
    }

    decorateMethodsWithLogging(Foo.class)

    def foo = new Foo(System.out)
    System.setOut(foo)

    System.out.println("HAH")

Published: 2015-06-02(Tue) 06:33