Gracias.
Creo que esto es mucho mejor. Al no codificar la ruta allí. Principalmente, el log4j se configurará y desplegará solo una vez.
Gracias por tu ayuda.
Avalados por :
Hola,
Estoy implementando Log4j en mi EJB. Ahora tengo problemas para leer/localizar mi archivo log4j.properties. No estoy seguro de la ruta donde puse mi log4j.properties. He intentado en varios lugares pero parece que no funciona. Mi EJB está empaquetado con un WAR en un archivo EAR.
Actualmente estoy colocando mi archivo log4j.properties en la carpeta raíz de mi EJB. (CustomEJB>log4j.properties)
Este es mi código en mi EJB
....
public class GatewayBean implements SessionBean {
static Logger logger = Logger.getLogger("GatewayBean.class");
public String[] testLog() {
try{
PropertyConfigurator.configure("log4j.properties");
logger.info(new Date() + " testLog");
logger.info(new Date() + " Testing for logging");
}catch (Exception e){
e.printStackTrace();
}
}
...
Cuando intento cargar el archivo de propiedades, no puede encontrarlo. Este es el error que obtengo.
log4j:ERROR No se pudo leer el archivo de configuración [log4j.properties].#
java.io.FileNotFoundException: log4j.properties (El sistema no puede encontrar el archivo especificado)#
log4j:ERROR Ignorando archivo de configuración [log4j.properties].#
No hay problema para la aplicación WEB. Pero solo para EJB. Intenté ponerlo en EJB>META-INF, pero tampoco funcionó. Así que no estoy seguro de dónde poner el archivo de propiedades para que pueda cargarse. Intenté incluirlo en mi Java Build Path pero no puedo ya que solo se pueden incluir archivos .jar y .zip.
Gracias de antemano por la ayuda.
-
Justo ahora busqué en Google esto e intenté obtener la ruta cuando ejecuto este programa. Me di cuenta de que la ruta es \usr\X01\DVEBMGS01\j2ee\cluster\server0
Así que puse el archivo log4j.properties en esa ruta y ahora puede leerlo. Pero no creo que esta sea la forma correcta, ya que debería estar en el archivo de implementación. ¿Lo que me parece extraño es que la ruta debería ser \usr\X01\DVEBMGS01\j2ee\cluster\server0\apps\sap.com\GatewayEAR......?
Editado por: Adrian Chan el 15 de junio de 2009 a las 8:53 AM
Gracias.
Creo que esto es mucho mejor. Al no codificar la ruta allí. Principalmente, el log4j se configurará y desplegará solo una vez.
Gracias por tu ayuda.
Sí, correcto.
La ruta codificada es aplicable solo si despliegas la aplicación en un sistema AS Java específico (X01 en este caso).
Si no vas a cambiar el contenido del archivo log4j.properties, entonces puedes colocarlo como parte de la jerarquía de paquetes de Java. Para obtener los datos, puedes cargarlo como un recurso.
Ejemplo:
Supongamos que tu clase GatewayBean tiene un nombre completo com.some.company.app.ejb.GatewayBean. Entonces, el archivo log4j.properties debe estar ubicado en la estructura de archivos de clases Java en:
com/some/company/app/ejb/log4j.properties
Por supuesto, cuando construyas la aplicación, el log4j se comprimirá en el archivo JAR junto con las clases Java.
Luego puedes configurar log4j de la siguiente manera:
PropertyConfigurator.configure(GatewayBean.class.getResource("log4j.properties"));
La desventaja de este enfoque es que necesitarás volver a implementar la aplicación si tienes que cambiar el archivo log4j.properties. Sin embargo, si necesitas cambiar el contenido del archivo con frecuencia, entonces los datos de configuración de log4j deben proporcionarse dinámicamente a través de java.util.Properties.
Saludos cordiales,
Tsvetomir
Gracias por tu aclaración.
En cuanto a tu sugerencia para la ruta, ¿sería una ruta codificada directamente? No puedo codificar la ruta del registro en el programa, ya que esta aplicación J2EE se desplegará en otro servidor. Estoy pensando en obtener la ruta del contexto y luego mapearla para obtener la ruta completa para el archivo log4j.properties. Otra cosa que me preocupa es, si no puedo iniciar sesión en el servidor SAP Netweaver para colocar mi log4j.properties, ¿cómo puedo hacerlo? Solo estoy buscando una forma en la que pueda desplegar mi archivo EAR sin necesidad de hacer ninguna configuración para el log4j.
Gracias.
Hola,
Cuando proporcionas la ruta al archivo como "log4j.properties", entonces la JVM buscará el archivo en el directorio de trabajo actual (CWD). Para los procesos del servidor, el CWD es /usr/sap/SID/INST/j2ee/cluster/serverN, donde SID es tu ID de sistema alfanumérico de 3 caracteres, INST es el nombre de la instancia y N es el número del nodo del servidor.
En tu caso es:
/usr/sap/X01/DVEBMGS01/j2ee/cluster/server0
Así que necesitas dejar el archivo ahí:
/usr/sap/X01/DVEBMGS01/j2ee/cluster/server0/log4j.properties
Sin embargo, ¡esto no es una buena práctica! ¿Por qué?
El sistema SAP es una solución de cluster. Una vez que agregas otro nodo de servidor, el nuevo proceso del servidor buscará el archivo en su propio CWD, que por supuesto es diferente. Por lo tanto, al agregar un nodo de servidor, debes tener en cuenta copiar el archivo.
Por eso, lo mejor sería mantener el archivo en el share del cluster directamente, es decir, /usr/sap/X01/SYS
Por ejemplo, podrías crear una carpeta para log4j allí y copiar el archivo en la nueva carpeta:
/usr/sap/X01/SYS/log4j/log4j.properties
Luego en tu código llama al método configure(String) con la ruta absoluta:
PropertyConfigurator.configure("/usr/sap/X01/SYS/log4j/log4j.properties");
Espero que esto ayude.
Saludos cordiales,
Tsvetomir
contacto@primeinstitute.com
(+51) 1641 9379
(+57) 1489 6964
© 2024 Copyright. Todos los derechos reservados.
Desarrollado por Prime Institute