Pregunta

Por lo tanto, aquí está mi problema:
Tengo un mensaje bean controlado por X y me gustaría hacer uso de registrador en el método de X onMessage (). Vamos a suponer que tengo una sola instancia del bean corriendo en mi servidor de aplicaciones, por lo tanto, me gustaría inicializar log4j en ejbCreate (). Esto significaría que tendría que hacer algo como esto:

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

Sin embargo, esto no ayuda. No importa lo que hago yo siempre consigo mi corriente como nulo, probé otras versiones: this.getClass () getStream () y ResourceBundle..

Me jar'ed mi archivo de propiedades para test.jar y añadió que en Bibliotecas de EAR (estoy usando RAD7) y se puso reflejado en mi manifest.mf.

¿Alguien se enfrentan a este problema antes? En caso afirmativo, ¿cómo solucionarlo? Apreciamos su ayuda ...

¿Fue útil?

Solución

No recomendaría la configuración de log4j en el EJB crear método. Múltiples EJBeans se pueden activar / pasivado en los contenedores capricho por la especificación J2EE. Por lo tanto existe la posibilidad de que termina la configuración de log4j varias veces. Recomendar el uso de beans de arranque que están garantizados para ser invocado 1 sola vez.

Otros consejos

Si usted está recibiendo esto desde dentro de un archivo JAR, entonces te estás perdiendo un / iniitial:

Classloader.getResourceAsStream("/xyz_log4j.properties")

Y dependiendo de qué directorio contiene el fichero de propiedades, hay que especificar una ruta a ese directorio con respecto a la parte superior de la jerarquía de clases. Por ejemplo, si este archivo de propiedades se encuentra en el mismo directorio que net.mine.Program, entonces usted podría hacer esto:

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

No creo que se puede leer desde el directorio META-INF utilizando getResourceAsStream(), pero nunca he probado así que quizás hay una manera de hacerlo.

Usted podría intentar codificar duro el nombre de la clase a la carga.

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

Como alternativa es posible que desee ver en SLF4J . Que es una fachada que puede sentarse en la parte superior de LOG4J. El API es prácticamente el mismo (el mismo creador creo), y SLF4J no requiere una llamada de inicialización explicado, lo que simplifica las cosas un poco.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top