2011-10-03 71 views
1

我正在使用Grails 1.3.7。我建立一個war文件&在tomcat中部署它。我有一個外部groovy配置文件,我用它來設置日誌記錄。我在聲明中添加了一些perf4j日誌appender,但現在配置文件無法編譯,因爲它無法解析完全限定的類名。如何解析grails war部署的外部配置文件中的類引用?

的代碼看起來是這樣的:

log4j = { 
    ... 
    // file appender that writes out the URLs of the Google Chart API graphs generated by the performanceGraphAppender 
    def performanceGraphFileAppender = new org.apache.log4j.FileAppender(
     fileName: "log/perfGraphs.log", 
     layout: pattern(conversionPattern: '%m%n') 
    ) 
    appender name: 'performanceGraphFileAppender', performanceGraphFileAppender 

    // this appender creates the Google Chart API graphs 
    def performanceGraphAppender = new org.perf4j.log4j.GraphingStatisticsAppender(
     graphType: 'Mean',  // possible options: Mean, Min, Max, StdDev, Count or TPS 
     tagNamesToGraph: 'tag1,tag2,tag3', 
     dataPointsPerGraph: 5 
    ) 
    performanceGraphAppender.addAppender(performanceGraphFileAppender) 
    appender name: 'performanceGraph', performanceGraphAppender 

    ... 
} 

而這寫出到日誌中的錯誤信息是這樣的:

script1317679813518843914255.groovy: 38: unable to resolve class org.perf4j.log4j.GraphingStatisticsAppender 
@ line 38, column 34. 
    def performanceGraphAppender = new org.perf4j.log4j.GraphingStatisticsAppender(

戰爭文件我建立包含所有必需的JAR文件。任何想法如何讓它解決參考?

感謝,

基因

回答

0

還有就是部署後,它開始使用log4j的從Tomcat的可能性。看看lib文件夾,也許它包含log4j罐。如果那是真的 - 它使用不同的類加載器,那看不到你的perf4j類。

你可以試試把你的Perf4罐子到Tomcat的lib,大概可以解決這個問題

+0

這很有趣。我會給它一個鏡頭。不過,我想知道這是如何工作的:grails運行時與perf4j文件位於相同的WAR文件中。爲什麼它找不到它們?我錯過了什麼? –

+0

當我將perf4j和log4j jar放入tomcat/lib文件夾時,代碼似乎運行正常。我想知道它爲什麼不從應用程序WAR文件中提取類。 –

+0

這是不同的類加載器的問題。看來,tomcat在其他地方有log4j類,不僅僅是你的戰爭(因爲log4j被大多數項目使用),而且JVM聲明使用它(=來自不同的類加載器)。同時,per4j只在你的戰爭中,但包含log4j(=鄰居類加載器)的類加載器無法訪問你的庫。 –