如何在新的 Grails 2.4.5 项目中配置 SMTPAppender?在开发环境中运行时收到 NoClassDefFoundError:
| Error log4j:ERROR Error initializing log4j: javax/mail/Message
| Error java.lang.NoClassDefFoundError: javax/mail/Message
Gist: Detailed stacktrace
我已经为 javax.mail 配置了一个依赖项,并配置了 log4j,如下所示:
dependencies {
provided 'javax.mail:mail:1.4.7'
}
log4j = {
appenders {
appender new org.apache.log4j.net.SMTPAppender(
name: 'smtp',
layout: pattern(conversionPattern: '%d{MM-dd-yyyy HH:mm:ss.SSS} [%t] %c %M %x%n%p: %m%n')
to: 'example@example.com',
from: 'example@example.com',
subject: 'Grails Message',
SMTPHost: '127.0.0.1')
)
}
}
GitHub: Example Project
最佳答案
我知道这篇文章很旧,但我一直在努力解决这个问题,直到我找到了一个至少对我有用的解决方案(不是使用 SMTPAppender 而是使用 Sentry - 目的相同)。
我在您收到的错误中找到的解释
Error log4j:ERROR Error initializing log4j: javax/mail/Message
Error java.lang.NoClassDefFoundError: javax/mail/Message
来自这段代码:
dependencies {
provided 'javax.mail:mail:1.4.7'
}
问题是,当你编译东西时,当你尝试做时
grails run-app
您收到此错误。我发现的解释是 log4j 在 maven 依赖项解决之前初始化。
我写了一篇关于我如何使用 Sentry 作为 appender 的评论。
https://github.com/getsentry/raven-java/issues/184#issuecomment-259432057
基本上,我没有添加 maven 依赖项,而是下载了 java 文件,并将其添加到 src/java 中的 grails 项目中
因此,对于 Sentry 或示例,我将 SentryAppender.java 添加到 my.package.sentry 中,然后在 log4j 中添加:
appenders {
environments {
// This block is set up to use the stock raven SentryAppender in
// production. Sentry Appender runs into all kinds of
// class loading weirdness when used in a forked grails environment
production {
appender new my.package.sentry.SentryAppender(
name: 'sentry',
dsn: 'REDACTED',
threshold: org.apache.log4j.Level.WARN
)
}
// Uncomment this block if you need to test sentry
// in a dev environment
development {
appender new my.package.sentry.SentryAppender(
name: 'sentry',
dsn: 'REDACTED',
threshold: org.apache.log4j.Level.WARN
)
}
}
}
root {
warn 'stdout', 'sentry'
error 'stdout', 'sentry'
additivity = false
}
这样,它不依赖于外部依赖。
我想您可以执行类似于邮件依赖项的操作,并将 java 文件添加到 src 文件夹中。
我希望它有帮助!
关于Grails log4j SMTPAppender NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30549099/