2015-08-12 1 views
0

Люди, использующие Grails/Groovy, должны знать, что при использовании log4j для сообщения журнала произойдет то, что имя метода и номер строки в сообщении журнала ошибочны.Любой способ рассказать класс от Groovy/Grails или оригинальной Java?

Так что я настроил свой собственный PatternLayout. PatternLayout и LocationInfo по следующему URL: log4j-groovy

Однако, когда нормальный класс java вызывает мой настраиваемый шаблон PatternLayout, имя метода неверно.

Что я могу сказать, что самый простой способ - позволить моему PatternLayout знать, является ли вызывающий объект классом Groovy или нормальным Java-классом, чтобы мой PatternLayout мог знать, как он должен приближаться.

Итак, есть ли способ узнать, что вызывающий (класс) - это Groovy или Java?

спасибо.

ответ

3

Все заводной объект реализовать интерфейс GroovyObject, чтобы вы могли проверить его с помощью:

if (o instanceof GroovyObject) 
0

Это может заставить вас закрыть:

def isJavaClass = {Class c -> 
    def m = c.metaClass.methods.find() { it.name == 'getMetaClass' } 

    m == null || m.declaringClass.toString() == 'class groovy.lang.GroovyObjectSupport' 
} 

class Blah { 
} 

def classes = [ 
    TimeZone, 
    Closure, 
    Blah].findAll { isJavaClass(it) } 

assert classes == [TimeZone, Closure] 

Я пошарил в metaClass, но не мог найти дурака - надежный способ обнаружения Java-классов.

Смежные вопросы