2009-12-02 1 views
3

Я обновил приложение Grails 1.0.3 до Grails 1.1.1. Я обновил конфигурацию log4j в Config.groovy, чтобы соответствовать new DSL. Однако, после определения ConsoleAppender с PatternLayout, приложение не запускается, а вместо этого бросает MissingMethodException с сообщением:Grails 1.1.1 log4j DSL бросает MissingMethodException для конфигурации PatternLayout

groovy.lang.MissingMethodException: No signature of method: \ 
groovy.util.ConfigSlurper$_parse_closure5.pattern() is applicable \ 
for argument types: (java.util.LinkedHashMap) \ 
values: [[conversionPattern:%d{ISO8601} [%10.10t] [%18.18c] [%5p] - %m%n]] 

(я сломала выше сообщение на несколько строк для удобства чтения).

Моя конфигурация:

environments { 
    development { 
    log4j { 
     appenders { 
     console name: 'myAppender', 
       layout: pattern(conversionPattern: '%d{ISO8601} [%10.10t] [%18.18c] [%5p] - %m%n') 
     ... 
     } 
     root { 
     error 'myAppender' 
     additivity = true 
     } 
     error 'org.codehaus.groovy.grails.plugins', 
      'org.codehaus.groovy.grails.orm.hibernate', 
     ... 
    } 
    ... 
} 

Я попытался изменить шаблон, добавляя скобки для функции консоли(), но без успеха. Что вызывает это исключение?

ответ

6

Оказывается, я пропустил знак равенства в конфигурации. Решение должно было измениться:

log4j { 
    ... 
} 

в

log4j = { 
    ... 
} 

Довольно очевидное решение, как только вы видите его, по сравнению с примерами в документации, но когда вы получаете ошибки для конкретных замыканий/методов в DSL, ошибки не делают очевидным, какова настоящая проблема.

+0

У меня была аналогичная проблема, но у моего log4j есть знак равенства ... это было после обновления от grails 2.0.1 до 2.2.2. – jonnybot