2010-06-15 44 views
1

以下是Config.groovy中使用log4j DSL和Grails 1.2的基本log4j配置,它按預期工作(將所有錯誤記錄到給定文件):將基本Config.groovy log4j DSL轉換爲外部log4j.properties

log4j = { 
    appenders { 
     file name:'file', file:"c:/error.log" 
    } 

    error 'grails.app' 

    root { 
     error 'file' 
    } 
} 

如何將其轉換爲屬性樣式log4j配置文件?以下不工作:

log4j.rootLogger=ERROR, FA 

log4j.appender.FA=org.apache.log4j.FileAppender 
log4j.appender.FA.File=C:/error.log 

log4j.logger.grails.app=ERROR, FA 

我懷疑它做的error 'grails.app'翻譯,但我真的不知道。此外,該文件甚至不會創建,而使用第一個DSL版本時,它會在應用程序啓動時創建。

如果這有什麼差別,屬性文件被外部配置(然而,使用外部log4j.groovy文件正常工作):

grails.config.locations = ["file:${basedir}/extconf/log4j.properties"] 

我真正想要的是一個外部log4j屬性文件,該文件記錄所有應用程序例外的文件。

回答

1

我相信這裏的問題是你的屬性文件沒有被用來配置log4j。通過grails.config.locations包括它根本不起作用。

一個選擇是將log4j.properties放在類路徑中,例如直接在'grails-app/conf'中。檢查它是否正常工作,獲取配置權限,然後檢查log4j文檔以瞭解如何爲屬性文件指定替代位置。它可能涉及設置系統屬性。

+0

感謝您的替代方法。但是在Grails 1.1和Grails 1.2之間做了些什麼改變,這使得在權威指南(第二版),第310頁,第12章/外部化配置,列表12-9中所做的明確聲明無效。 – 2010-06-16 21:16:11

+0

恐怕我無法訪問DGG進行檢查。據我所知,你從來沒有能夠指定一個標準的log4j.properties文件作爲外部配置。 您可以使用'grails.config.locations'指定外部屬性文件,但Log4j配置是一個相當特殊的情況。因此,通過您提供的示例,您可以訪問「ConfigurationHolder.config.log4j.rootLogger」屬性。它不會對Log4j本身產生任何影響。 這是我的理解,但我可能在這方面是錯誤的。 – 2010-06-17 09:08:32