java - ¿Dónde debería poner el archivo log4j.properties?
log4j in glassfish (15)
Escribí un proyecto de servicio web usando netbeans 6.7.1 con glassfish v2.1, puse log4j.properties en el directorio raíz del proyecto y uso:
static Logger logger = Logger.getLogger(MyClass.class);
en Constructor:
PropertyConfigurator.configure("log4j.properties");
y en funciones:
logger.info("...");
logger.error("...");
// ...
pero, es información de error (en realidad, he intentado ponerlo casi en todos los directorios que pude darme cuenta):
log4j:ERROR Could not read configuration file [log4j.properties].
java.io.FileNotFoundException: log4j.properties (The system cannot find the file specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:106)
at java.io.FileInputStream.<init>(FileInputStream.java:66)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:297)
at org.apache.log4j.PropertyConfigurator.configure(PropertyConfigurator.java:315)
at com.corp.ors.demo.OrsDemo.main(OrisDemo.java:228)
log4j:ERROR Ignoring configuration file [log4j.properties].
log4j:WARN No appenders could be found for logger (com.corp.ors.demo.OrsDemo).
log4j:WARN Please initialize the log4j system properly.
el proyecto de ejemplo podría obtenerse de http://www.91files.com/?N3F0QGQPWMDGPBRN0QA8
Como ya se dijo, log4j.properties debe estar en un directorio incluido en classpath, quiero agregar que en un proyecto mavenizado, un buen lugar puede ser src/main/resources/log4j.properties
Descubrí que Glassfish está buscando [Glassfish install location] / glassfish / domains [your domain] / como el directorio de trabajo predeterminado ... puede soltar el archivo log4j.properties en esta ubicación e inicializarlo en su código utilizando PropertyConfigurator como se menciono antes...
Properties props = System.getProperties();
System.out.println("Current working directory is " + props.getProperty("user.dir"));
PropertyConfigurator.configure("log4j.properties");
El archivo debe ubicarse en el directorio WEB-INF / classes. Esta estructura de directorio debe estar empaquetada dentro del archivo war.
He gastado una gran cantidad de tiempo para descubrir por qué no se ve el archivo log4j.properties .
Luego noté que era visible para el proyecto solo cuando estaba en las carpetas MyProject / target / classes / y MyProject / src / main / resources .
Espero que sea útil para alguien.
PD: El proyecto fue basado en maven.
Mi IDE es NetBeans. Pongo el archivo log4j.property como se muestra en las imágenes
Raíz
Web
WEB-INF
Para usar este archivo de propiedades, debe escribir este código:
package example;
import java.io.File;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.Logger;
import javax.servlet.*;
public class test {
public static ServletContext context;
static Logger log = Logger.getLogger("example/test");
public test() {
String homeDir = context.getRealPath("/");
File propertiesFile = new File(homeDir, "WEB-INF/log4j.properties");
PropertyConfigurator.configure(propertiesFile.toString());
log.info("This is a test");
}
}
Puede definir el contexto de ServletContext estático desde otro archivo JSP. Ejemplo:
test.context = getServletContext();
test sample = new test();
Ahora puede usar el archivo log4j.property en sus proyectos.
No sé si esta es la forma correcta. Pero resolvió mi problema. ponga el archivo log4j.properties en "carpeta de proyecto" / config y use PropertyConfigurator.configure ("config // log4j.properties");
funcionará con IDE pero no cuando ejecute el archivo jar usted mismo. cuando ejecuta el archivo jar solo, copie el archivo log4j.properties en la carpeta en la que se encuentra el archivo jar. Cuando el archivo jar y la propiedad se encuentren en el mismo directorio, se ejecutará correctamente.
Para un proyecto basado en Maven, mantenga su log4j.properties en src / main / resources. ¡Nada más que hacer!
Ponga log4j.properties en classpath. Aquí están los 2 casos que lo ayudarán a identificar la ubicación correcta: 1. Para la aplicación web, el classpath es / WEB-INF / classes.
/WEB-INF
classes/
log4j.properties
Para probar desde la prueba principal / unidad, el classpath es el directorio fuente
/Project/ src/ log4j.properties
Puede especificar la ubicación del archivo de configuración con el argumento VM -Dlog4j.configuration = "file: / C: /workspace3/local/log4j.properties"
Sé que es un poco tarde para responder a esta pregunta, y tal vez ya encontraste la solución, pero estoy publicando la solución que encontré (después de hacer muchas búsquedas en Google), así que puede ayudar un poco:
- Ponga log4j.properties bajo WEB-INF / classes del proyecto como se mencionó anteriormente en este hilo.
- Coloque log4j-xx.jar en WEB-INF / lib
- Prueba si se cargó log4j: agrega
-Dlog4j.debug
@ al final de tus opciones de java de tomcat
Espero que esto ayude
rgds
Se han proporcionado algunas respuestas específicas técnicamente correctas pero, en general, puede estar en cualquier lugar del classpath en tiempo de ejecución, es decir, donde la JVM busca las clases.
Este podría ser el directorio / src en Eclipse o el directorio WEB-INF / classes en su aplicación implementada, pero es mejor tener en cuenta el concepto de classpath y por qué se coloca el archivo en él, no solo trate WEB-INF / clases como un directorio "mágico".
Si coloca log4j.properties dentro de src, no necesita usar la instrucción -
PropertyConfigurator.configure("log4j.properties");
Se tomará automáticamente ya que el archivo de propiedades está en el classpath.
Si tiene una configuración estándar de Maven Project con Intellij, simplemente puede colocar el archivo de propiedades de log4j en:
proyecto / src / main / recursos
Tienes que ponerlo en el directorio raíz, que corresponde a tu contexto de ejecución.
Ejemplo:
MyProject
src
MyClass.java
log4j.properties
Si comienza a ejecutar desde un proyecto diferente, necesita tener ese archivo en el proyecto utilizado para comenzar la ejecución. Por ejemplo, si un proyecto diferente contiene algunas pruebas JUnit, también debe tener su archivo log4j.properties.
Sugiero usar log4j.xml en lugar de log4j.properties. Tienes más opciones, obtén ayuda de tu IDE y demás ...
Tratar:
PropertyConfigurator.configure(getClass().getResource("/controlador/log4j.properties"));