所以,这里是我的问题: 点击 我有一个消息驱动bean X,想使X的onMessage()方法的使用记录仪。让我们假设,我有我的应用程序服务器上运行的bean的一个实例,因此,我会的ejbCreate初始化log4j的()。这意味着我将不得不做这样的事情:

public void ejbCreate() {
    PropertyConfigurator.configure(Classloader.getResourceAsStream("xyz_log4j.properties"));
}

然而,这并不能帮助。无论我做什么,我总是让我流为空,我试过其他版本:this.getClass()getStream()和资源包。

我jar'ed我的属性文件中Test.jar的和下EAR库加入它(我使用RAD7)和它得到了反映在我MANIFEST.MF。

有没有人之前面对这个问题?如果是的话,你是怎么解决的呢? 感谢您的帮助......

有帮助吗?

解决方案

我不建议在EJB配置log4j的创建方法。多个EJBeans可以激活/钝化在容器每J2EE规范随心所欲。所以你最终配置的log4j多次的可能性。建议使用这些都保证要被调用只有1次启动Bean。

其他提示

如果你从一个JAR文件中得到这个,那么你就错过了iniitial /

Classloader.getResourceAsStream("/xyz_log4j.properties")

和取决于哪个目录包含了属性文件,你必须指定相对于类层次结构的顶部是目录的路径。例如,如果该属性文件在相同的目录中net.mine.Program,那么这样做:

Classloader.getResourceAsStream("/net/mine/xyz_log4j.properties")

我不相信你可以从META-INF目录使用getResourceAsStream()阅读,但我从来没有尝试过这样也许有办法做到这一点。

您可以尝试硬编码的类名到负载。

<name of your class>.class.getResourceAsStream(fileName);

另外,你可能想看看 SLF4J 。这是可以坐在LOG4J的外观。该API是大多相同的(相同的创作者相信),和SLF4J不需要显明的初始化呼叫,这简化事情有点。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top