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文件。任何想法如何讓它解決參考?
感謝,
基因
這很有趣。我會給它一個鏡頭。不過,我想知道這是如何工作的:grails運行時與perf4j文件位於相同的WAR文件中。爲什麼它找不到它們?我錯過了什麼? –
當我將perf4j和log4j jar放入tomcat/lib文件夾時,代碼似乎運行正常。我想知道它爲什麼不從應用程序WAR文件中提取類。 –
這是不同的類加載器的問題。看來,tomcat在其他地方有log4j類,不僅僅是你的戰爭(因爲log4j被大多數項目使用),而且JVM聲明使用它(=來自不同的類加載器)。同時,per4j只在你的戰爭中,但包含log4j(=鄰居類加載器)的類加載器無法訪問你的庫。 –