当类加载器设置为父级时,log4j日志在Websphere中不起作用

时间:2015-02-02 19:14:40

标签: java log4j websphere javamail

我有两个问题。在我的应用程序中,我们使用javax.mail api的自定义电子邮件功能。当类加载器设置保持为Parent First但没有使用该类加载器设置生成自定义日志时,邮件可以正常运行。

当我将类加载器更新为Parent Last时,会生成日志但是自定义电子邮件功能不起作用,它会在message.saveChanges();线和服务器正在抛出超时错误。

我有mail.jar& log4j.jar包含在应用程序的WEB-INF / lib中,而log4j.properties文件存在于classes文件夹中

任何人都可以告诉我是什么导致了这个问题吗?有没有办法让日志和电子邮件功能都可以使用单个类加载器设置。

感谢。

2 个答案:

答案 0 :(得分:0)

这很可能是因为Log4J没有加载您认为它的配置文件(log4j.xmllog4j.properties)。

添加log4j.debug=true系统属性,重新启动服务器并查看日志。日志(SystemOut.logSystemErr.log)将告诉您确切加载了哪个配置文件。

答案 1 :(得分:0)

由于您使用的是“mail.jar”,因此您的JavaMail版本必须相当旧。

将websphere附带的JavaMail升级到1.5.3,其中包含fixBug 6668 -skip unusable Store and Transport classes。来自错误报告:

  

在复杂的类加载情况下,有可能存在   JavaMail类的多个副本。已定义商店或运输   一个副本可能由另一个副本加载,但它不可用,因为   他们在不同的ClassLoaders中。在这种情况下,JavaMail应该跳过   在不可用的类上尝试从另一个ClassLoader加载该类。

     

例如,如果应用程序包含GlassFish,则会发生这种情况   JavaMail类,应用程序类加载器配置为首选   系统类上的应用程序类,以及app服务器本身的尝试   在应用程序的上下文中运行时使用JavaMail。

然后,您需要从WEB-INF / lib中删除旧版本的JavaMail,如果需要,也可以将JavaMail 1.5.3放在WEB-INF / lib中。我已经为GlassFish测试了这个修复程序,所以我假设很多其他应用程序遇到同样的问题。

您可以从latest snapshot主页下载JavaMail reference implementation和官方发布。