Java Apache Log4j自定义电子邮件附加器未邮寄,应用程序启动时出现错误通知
我有一个应用程序,配置了记录器,如果设置了标记,可以向所有应用程序管理员发送电子邮件。我们编写了一个定制的电子邮件附加器来实现这一点,因为现有的SMTPAppender对于我们的需求来说太死板了 本周早些时候,我们注意到没有收到来自QA服务器的日志电子邮件,这在以前是经常发生的。在我们的配置中没有任何东西会突然出现在我面前,我很困惑 这是IDE中应用程序启动的输出:Java Apache Log4j自定义电子邮件附加器未邮寄,应用程序启动时出现错误通知,java,email,logging,log4j,log4j2,Java,Email,Logging,Log4j,Log4j2,我有一个应用程序,配置了记录器,如果设置了标记,可以向所有应用程序管理员发送电子邮件。我们编写了一个定制的电子邮件附加器来实现这一点,因为现有的SMTPAppender对于我们的需求来说太死板了 本周早些时候,我们注意到没有收到来自QA服务器的日志电子邮件,这在以前是经常发生的。在我们的配置中没有任何东西会突然出现在我面前,我很困惑 这是IDE中应用程序启动的输出: 2015-10-07 14:26:11,344 ERROR Error processing element EMAIL: CLA
2015-10-07 14:26:11,344 ERROR Error processing element EMAIL: CLASS_NOT_FOUND
2015-10-07 14:26:11,435 ERROR Unable to locate appender Email for logger
14:26:11.709 [main] INFO c.q.app.services.server.data.h2.H2DbLifecycleManager - Starting DB on
connection jdbc:h2:tcp://localhost/C:/Users/jason/AppData/Local/appserver/store/data/db
2015-10-07 14:26:13,401 ERROR Error processing element EMAIL: CLASS_NOT_FOUND
2015-10-07 14:26:13,416 ERROR Unable to locate appender Email for logger
Oct 07, 2015 2:26:14 PM org.hibernate.validator.internal.util.Version <clinit>
INFO: HV000001: Hibernate Validator 4.3.1.Final
并且自定义附加器定义为
/**
* An appender used to send an email notification of a log event to all application Administrators.
*/
@Plugin(name = "EMAIL", category = "Core", elementType = "appender", printObject = true)
public class EmailAppender extends AbstractAppender
{
/**
* @param name - the name of the Appender. Cannot be null
* @param filter - The Filter or null (defaults to ThresholdFilter, level of ERROR).
* @param layout - The layout to use - if not included it uses the default PatternLayout.
* @return an appender for sending emails on logging events
*/
@PluginFactory
public static EmailAppender createAppender(@PluginAttribute("name") final String name,
@PluginElement("Filter") Filter filter, @PluginElement("Layout") Layout<? extends Serializable> layout)
{
if (name == null)
{
LOGGER.error("No name provided for NotificationAppender");
return null;
}
if (filter == null)
filter = ThresholdFilter.createFilter(null, null, null);
if (layout == null)
layout = PatternLayout.createDefaultLayout();
return new EmailAppender(name, filter, layout);
}
protected EmailAppender(String name, Filter filter, Layout<? extends Serializable> layout)
{
super(name, filter, layout);
}
...
}
/**
*用于向所有应用程序管理员发送日志事件电子邮件通知的追加器。
*/
@插件(name=“EMAIL”、category=“Core”、elementType=“appender”、printObject=true)
公共类EmailAppender扩展了AbstractAppender
{
/**
*@param name-追加器的名称。不能为空
*@param filter-过滤器或null(默认为ThresholdFilter,错误级别)。
*@param layout-要使用的布局-如果未包含,则使用默认的PatternLayout。
*@返回用于在记录事件时发送电子邮件的附件
*/
@插件工厂
公共静态EmailAppender createAppender(@PluginAttribute(“name”)最终字符串名,
@PluginElement(“Filter”)Filter,@PluginElement(“Layout”)Layout发布此答案,以防任何人遇到类似情况
由于未知原因,Log4J注释扫描器无法获取自定义appender类,尽管类定义上有`@Plugin(name=…)注释。我没有经验或工具深入了解原因,但找到了解决方案
在配置
标记中添加一个包
限定符就成功了,如下所示:
<Configuration status="WARN" packages="com.company.web.common.logging">
<Configuration status="WARN" packages="com.company.web.common.logging">