当前位置: 首页 > 知识库问答 >
问题:

Grails ClassNotFoundException:org。阿帕奇。log4j。记录器

别子实
2023-03-14

我正试图让我的Grails应用程序使用logback插件登录。根据文档说明,以下是我迄今为止所做的工作:

BuildConfig
===========
grails.project.dependency.resolution = {
    inherits("global") {
        excludes 'grails-plugin-log4j', 'log4j', 'h2'
    }

    log "error"
    checksums true
    legacyResolve false

    repositories {
        inherits true

        grailsPlugins()
        grailsHome()
        mavenLocal()
        grailsCentral()
        mavenCentral()

        // For logback plugin.
        mavenRepo "http://repo.grails.org/grails/libs-releases/"
    }

    dependencies {
        // This plugin is a binary plugin, so it belongs here instead of under 'plugins'.
        compile 'org.grails.plugins:logback:0.3.1'

        test "org.grails:grails-datastore-test-support:1.0-grails-2.4"
    }
}

Config
======
import ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy
import ch.qos.logback.core.rolling.FixedWindowRollingPolicy

<lots of more configs here>

logback = {
    appenders {
    rollingFile name:
        'rollingAppender',
        file: '/tmp/rolling.log',
        encoder: pattern(pattern: '%-4relative [%thread] %-5level %logger{35} - %msg%n'),
        triggeringPolicy: new SizeBasedTriggeringPolicy(maxFileSize: 10*1024*1024),
        rollingPolicy: new FixedWindowRollingPolicy(fileNamePattern: '/tmp/rolling.%i.log.gz')
    }

    root {
        info rollingAppender
    }

    error rollingAppender: 'org.codehaus.groovy.grails.web.servlet',
        'org.codehaus.groovy.grails.web.pages'
}

然后我运行了一个grails清洁。当我运行一个grails运行应用程序时,我得到一个绝对巨大的堆栈跟踪,如下所示:

|Compiling 161 source files
    [groovyc] org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
    [groovyc] General error during semantic analysis: Unable to load logging class
    [groovyc] 
    [groovyc] groovy.lang.GroovyRuntimeException: Unable to load logging class
    [groovyc]   at org.codehaus.groovy.transform.LogASTTransformation$AbstractLoggingStrategy.classNode(LogASTTransformation.java:269)
    [groovyc]   at groovy.util.logging.Log4j$Log4jLoggingStrategy.addLoggerFieldToClass(Log4j.java:72)
    [groovyc]   at org.codehaus.groovy.transform.LogASTTransformation$1.visitClass(LogASTTransformation.java:112)
    [groovyc]   at org.codehaus.groovy.transform.LogASTTransformation.visit(LogASTTransformation.java:157)

<massive stack trace omitted for brevity>

General error during semantic analysis: Unable to load logging class
groovy.lang.GroovyRuntimeException: Unable to load logging class
    at org.codehaus.groovy.transform.LogASTTransformation$AbstractLoggingStrategy.classNode(LogASTTransformation.java:269)
    at groovy.util.logging.Log4j$Log4jLoggingStrategy.addLoggerFieldToClass(Log4j.java:72)
    at org.codehaus.groovy.transform.LogASTTransformation$1.visitClass(LogASTTransformation.java:112)

<massive stack trace omitted for brevity>

    at org.codehaus.groovy.grails.cli.support.GrailsStarter.rootLoader(GrailsStarter.java:236)
    at org.codehaus.groovy.grails.cli.support.GrailsStarter.main(GrailsStarter.java:264)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:655)
    at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:765)
    at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:753)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:270)
    at org.codehaus.groovy.transform.LogASTTransformation$AbstractLoggingStrategy.classNode(LogASTTransformation.java:267)
... 608 more
6 errors

此外,在我的GGTS IDE中,添加到Config.groovy中的两个导入语句出现了编译器错误。听起来我的Grails应用程序中仍然有Log4j引用,并且运行grails清洁将Log4j JAR从我的类路径中删除。这可能解释了堆栈跟踪。但这并不能解释为什么Grails(或至少我的GGTS IDE)找不到我正在导入的logback类。

我确实看到我的配置中仍然有这个:

grails.logging.jul.usebridge = true

所以我问:我如何修复这个堆栈跟踪和我的IDE错误?

做一个grails依赖关系报告会生成一个巨大的图表,它似乎显示了我在log4j上还有两个依赖关系:

+--- org.grails.plugins:tomcat:7.0.54
|    \--- org.apache.tomcat:tomcat-catalina-ant:7.0.53
|    \--- org.apache.tomcat.embed:tomcat-embed-jasper:7.0.53
|         \--- org.apache.tomcat.embed:tomcat-embed-el:7.0.53

<HERE>
|    \--- org.apache.tomcat.embed:tomcat-embed-logging-log4j:7.0.53

+--- org.grails:grails-plugin-rest:2.4.2
|    \--- org.slf4j:jcl-over-slf4j:1.7.5
|    \--- org.slf4j:slf4j-api:1.7.5
|    \--- com.google.code.gson:gson:2.2.4
|    \--- org.grails:grails-web:2.4.2
|         \--- org.grails:grails-web-common:2.4.2
|              \--- org.springframework:spring-webmvc:4.0.5.RELEASE
|              \--- org.springframework:spring-context-support:4.0.5.RELEASE
|              \--- org.grails:grails-databinding:2.4.2
|         \--- org.grails:grails-web-url-mappings:2.4.2
|         \--- org.grails:grails-web-fileupload:2.4.2
|              \--- commons-fileupload:commons-fileupload:1.3.1
|                   \--- commons-io:commons-io:2.2
|         \--- org.grails:grails-web-gsp:2.4.2
|         \--- org.springframework:spring-aspects:4.0.5.RELEASE
|         \--- org.grails:grails-web-mvc:2.4.2
|         \--- org.grails:grails-web-sitemesh:2.4.2
|              \--- opensymphony:sitemesh:2.4
|         \--- org.grails:grails-web-databinding:2.4.2
|         \--- org.grails:grails-web-jsp:2.4.2
|         \--- org.aspectj:aspectjweaver:1.8.0
|         \--- org.aspectj:aspectjrt:1.8.0
|    \--- org.grails:grails-plugin-controllers:2.4.2
|         \--- org.grails:grails-plugin-validation:2.4.2
|    \--- org.grails:grails-plugin-datasource:2.4.2
|         \--- org.springframework:spring-jdbc:4.0.5.RELEASE

<HERE>
|         \--- org.apache.tomcat.embed:tomcat-embed-logging-log4j:7.0.50

所以:

  • org.grails.plugins:tomcat:7.0.54取决于:
    • org.apache.tomcat.embed: tomcat-embed-loging-log4j: 7.0.53;和
    • org.grails: grails-plugin-datassource: 2.4.2这取决于:
    • org.apache.tomcat.embed: tomcat-embed-loging-log4j: 7.0.50

    所以我的下一个问题是:这些是罪魁祸首吗?如果是,我如何安全地移除它们?


共有1个答案

岳泉
2023-03-14

我有完全相同的堆栈跟踪,并通过添加一个slf4j log4j桥来解决它,以确保所有仍然依赖log4j的传递或插件现在将通过logback登录:

runtime "org.slf4j:jul-to-slf4j:1.7.7"
runtime "org.slf4j:log4j-over-slf4j:1.7.7"

希望有帮助。

 类似资料:
  • 我们使用ivy来管理一个多项目java应用程序,最近当我们进行构建时,这个错误开始出现。这是什么原因?

  • 在我部署在WebSphere 8.5上的java应用程序中,我遇到了这个错误,尽管我的maven依赖项低于log4j。 我确实运行了一个,我可以看到它正以 的形式被拉进来,这是我期望在树结果中看到的,这样我就可以确认它在类路径中。有什么想法吗?

  • 这是我们单个模块的pom.xml 我们有很多模块,当我们从intellji运行时,当我们尝试将单个模块转换为。jar并通过-mvn clean安装运行,我们得到了这个错误。 这是错误代码

  • 我有一个Web应用程序Java类运行到一个名为Sincronizador的Wildfly中。我确实创建了一个特定的org.apache.log4j。记录器在Sincronizador.java但是也将信息放在Wildfly中。我想只在这个记录器中记录信息

  • Apache Kafka:分布式消息传递系统 Apache Storm:实时消息处理 我们如何在实时数据管道中使用这两种技术来处理事件数据? 在实时数据管道方面,我觉得两者做的工作是一样的。如何在数据管道上同时使用这两种技术?

  • 我有一个简单的项目和一些EJB,我试图部署到一个服务器。这就是我如何尝试初始化我的: 没什么特别的。 这就是我的相关部分如下所示: 没有这一部分,我可以建立我的项目。但在这一部分,我得到了一个例外: 我该怎么办?非常感谢。