【问题标题】:How to resolve class references in an external config file for grails war deployment?如何解析外部配置文件中的类引用以进行 grails 战争部署?
【发布时间】:2011-10-04 09:47:03
【问题描述】:

我正在使用 Grails 1.3.7。我构建了一个战争文件并将其部署在 tomcat 中。我有一个用于设置日志记录的外部 groovy 配置文件。我在声明中添加了一些 perf4j 日志附加程序,但现在配置文件无法编译,因为它无法解析完全限定的类名。

代码如下:

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(

我正在构建的 war 文件包含所有必需的 JAR。关于如何让它解决引用的任何想法?

谢谢,

基因

【问题讨论】:

    标签: grails log4j perf4j


    【解决方案1】:

    部署后有可能开始使用tomcat中的log4j。看看lib 文件夹,它可能包含log4j jars。如果这是真的 - 它使用不同的类加载器,那就看不到你的 perf4j 类。

    你可以尝试把你的perf4j jars放到tomcat的lib,应该可以解决这个问题

    【讨论】:

    • 这很有趣。我会试一试。不过,我确实想知道它是如何工作的:grails 运行时与 perf4j 文件位于同一个 WAR 文件中。为什么找不到他们?我错过了什么?
    • 当我将 perf4j 和 log4j jar 放入 tomcat/lib 文件夹时,代码似乎运行正常。我想知道为什么它不从应用程序 WAR 文件中获取类。
    • 这是不同类加载器的问题。似乎,tomcat 在其他地方有 log4j 类,不仅是你的战争(因为 log4j 被大多数项目使用),而且 JVM 声明使用它(=来自不同的类加载器)。同时 per4j 仅在您的战争中,但包含 log4j 的类加载器(= 邻居类加载器)无法访问您的库。
    • 在我将 log4j 放入 lib 文件夹之前,它也没有解析我的 logging.groovy 文件中提到的 log4j 类。所以它对我来说仍然是一个谜。
    猜你喜欢
    • 2014-08-18
    • 2018-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    • 1970-01-01
    相关资源
    最近更新 更多