尝试在 Tomcat 中启动 grails App 时出现“严重:错误 listenerStart”

Posted

技术标签:

【中文标题】尝试在 Tomcat 中启动 grails App 时出现“严重:错误 listenerStart”【英文标题】:"SEVERE: Error listenerStart" when trying to start grails App in Tomcat 【发布时间】:2012-02-21 03:24:58 【问题描述】:

我正在开发的 grails 应用程序有问题,我无法解决。 这是一个 grails 2.0 应用程序,应该在带有 Tomcat7 的 Debian stable 上运行。所以我构建了war文件并将其部署到Tomcat。我一启动它,就会在 Tomcat 日志文件 (catalina.out) 中得到以下日志输出:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
28-Jan-2012 13:02:00 org.apache.catalina.core.StandardContext start
SEVERE: Error listenerStart
28-Jan-2012 13:02:00 org.apache.catalina.core.StandardContext start
SEVERE: Context [/Gibbons5] startup failed due to previous errors
28-Jan-2012 13:02:00 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
SEVERE: The web application [/Gibbons5] registered the JBDC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.

我尝试通过将 Tomcats 日志级别增加到 FINEST 来使输出更加详细,但这并没有给我更多信息。此外,我将应用程序的日志级别更改为调试,但这也无济于事。

在我本地的 Tomcat 上,同样的战争和 Tomcat7 一切正常。

BuildConfig.groovy

grails.project.class.dir = "target/classes"
grails.project.test.class.dir = "target/test-classes"
grails.project.test.reports.dir = "target/test-reports"
grails.project.dependency.resolution = 
    // inherit Grails' default dependencies
    inherits("global") 
    
    log "warn" // log level of Ivy resolver, either 'error', 'warn', 'info', 'debug' or 'verbose'
    repositories 
        grailsPlugins()
        grailsHome()
        grailsCentral()
        mavenCentral()
    
    dependencies 
        compile "org.jadira.usertype:usertype.jodatime:1.9"
        runtime 'mysql:mysql-connector-java:5.1.18'
    


codenarc.reports = 
    XMLReport('xml') 
        outputFile = 'CodeNarcReport.xml'
        title = 'Gibbons5'
    
    HTMLReport('html') 
    outputFile = 'CodeNarcReport.html'
        title = 'Gibbons5'
        

codenarc.propertiesFile = 'codenarc.properties'

// cobertura exclusions
coverage 
    exclusions = [
        '**/BuildConfig*',
        '**/*SecurityConfig*'
    ]

application.properties

#Grails Metadata file
#Tue Jan 03 23:21:41 CET 2012
app.context=/
app.grails.version=2.0.0
app.name=Gibbons5
app.servlet.version=2.5
app.version=0.1
plugins.burning-image=0.5.0
plugins.code-coverage=1.2.5
plugins.codenarc=0.16.1
plugins.hibernate=2.0.0
plugins.joda-time=1.3.BUILD-SNAPSHOT
plugins.jquery=1.7.1
plugins.svn=1.0.1
plugins.syntax-highlighter=0.1.4
plugins.tomcat=2.0.0

BootStrap.groovy

导入 grails.util.GrailsUtil

class BootStrap 

    def baseDataGenerator

    def init =  servletContext ->
        switch (GrailsUtil.environment) 
            case 'development':
                log.debug("init() - booting as development")

                baseDataGenerator.generateData()

                break

            case 'production':
                log.info("init() - booting as production")

                baseDataGenerator.generateData()

                break

            case 'test':
                log.debug("init() - booting as test")

                baseDataGenerator.generateData()

                break

            default:
                log.warn("init() - uncovered environment " + GrailsUtil.environment)
        
    

    def destroy = 

【问题讨论】:

可能有多种原因,这很可能是因为插件依赖性需要 servlet 3.0 API,该 API 仅适用于 tomcat 7。请提供您的 BuildConfig.groovy 和您的 application.properties 当hibernate无法连接到数据库时,我也看到了这个。您应该调高应用程序的日志级别以记录 grails 类。 @chrislovecnm:我试过了,然后把它们都调试了,但应用程序还没有记录任何东西。 @crudolf: Tomcat7 给了我同样的输出:( 请显示您的 bootstrap.groovy 【参考方案1】:

我遇到了同样的错误,但我找到了以下文章:

http://mythinkpond.wordpress.com/2011/07/01/tomcat-6-infamous-severe-error-listenerstart-message-how-to-debug-this-error/

在简历中,你需要在你的 WEB-INF/classes 中创建一个 logging.properties 文件(你可以将它添加到 webapps 内的分解文件夹中并重新启动 tomcat)

logging.properties 的内容可以是:

org.apache.catalina.core.ContainerBase.[Catalina].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].handlers = java.util.logging.ConsoleHandler

重启Tomcat后你可以看到更详细的错误。

【讨论】:

仅供参考...您需要将此文件放入 /grails-app/conf 以便将其部署到正确的目录。【参考方案2】:

我在 Tomcat7 中遇到过相同类型的错误。我发现如果我按照关于将 Tomcat 转换为使用 log4j 的说明进行操作,它可以将早期错误捕获到日志中,但是如果在 Grails 应用程序的启动过程中早期发生错误,则使用默认的 Tomcat 配置,“Error listenerStart”就是全部你明白了。

一些来源:

    数据源设置为 dbCreate:validate,并且数据库与 GORM 域类不同步。 BootStrap.groovy 中的错误,主要与尝试自动创建由于先前运行而已存在的域对象有关。 其他配置错误(不太可能。

【讨论】:

以上是关于尝试在 Tomcat 中启动 grails App 时出现“严重:错误 listenerStart”的主要内容,如果未能解决你的问题,请参考以下文章

从 run-app 配置 Grails 访问日志

Grails - 不登录 Tomcat

使用gradle bootRun启动时,redirect()无法在Grails中解析@info.app.name @

在 AWS Elastic Beanstalk 上启动期间 Grails 4 应用程序停止

为啥 Grails(在 Tomcat 中)同时记录到 catalina.out 和我的自定义文件附加程序?

Tomcat 7 中的内存泄漏 Grails 应用程序