logger - Si usas maven, usualmente pones log4j.properties bajo java o resources?
log4j web application example (6)
Al colocar archivos de recursos en otra ubicación no es la mejor solución que puede usar:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<build>
Por ejemplo, cuando los archivos de recursos (p. Ej., Jaxb.properties) se profundizan en los paquetes junto con las clases de Java.
¿Dónde debo colocar el archivo log4j.properties cuando uso los directorios convencionales de Maven?
Algunas cuentas de "extracción de datos" para ese src/main/resources
es el lugar típico.
Resultados en Google Code Search :
-
src/main/resources/log4j.properties
: 4877 -
src/main/java/log4j.properties
: 215
Los recursos utilizados para inicializar el proyecto se colocan preferiblemente en la carpeta src / main / resources . Para habilitar la carga de estos recursos durante la compilación, simplemente puede agregar entradas en el pom.xml en el proyecto de maven como recurso de compilación.
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
Otros archivos .properties también se pueden guardar en esta carpeta utilizada para la inicialización. El filtrado se establece como verdadero si desea tener algunas variables en los archivos de propiedades de la carpeta de recursos y completarlas desde los archivos de propiedades de filtros de perfil, que se guardan en src / main / filters configurados como perfiles, pero es un caso de uso diferente. . Por ahora, puedes ignorarlos.
Este es un gran recurso de maven.apache.org/plugins/maven-resources-plugin/examples/… , es útil, simplemente navega a través de otras secciones también.
Poniéndolo en src/main/resources
lo agruparán dentro del artefacto. Por ejemplo, si su artefacto es un JAR, tendrá el archivo log4j.properties
dentro de él, perdiendo su punto inicial de hacer el registro configurable.
Normalmente lo pongo en src/main/resources
, y lo configuro para que salga a destino de esta forma:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<targetPath>${project.build.directory}</targetPath>
<includes>
<include>log4j.properties</include>
</includes>
</resource>
</resources>
</build>
Además, para que log4j realmente lo vea, debe agregar el directorio de salida a la ruta de clase. Si tu artefacto es un JAR ejecutable, probablemente utilizaste el complemento maven-assembly para crearlo. Dentro de ese complemento, puede agregar la carpeta actual del JAR a la ruta de la clase agregando una entrada de manifiesto de Class-Path
manera:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.your-package.Main</mainClass>
</manifest>
<manifestEntries>
<Class-Path>.</Class-Path>
</manifestEntries>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
Ahora el archivo log4j.properties estará justo al lado de su archivo JAR, independientemente configurable.
Para ejecutar su aplicación directamente desde Eclipse, agregue el directorio de resources
a su classpath en la configuración de ejecución: Run->Run Configurations...->Java Application->New
seleccione la pestaña Classpath
, seleccione Advanced
y busque su directorio src/resources
.
Si su archivo log4j.properties o log4j.xml no se encuentra en src / main / resources utilice este PropertyConfigurator.configure ("log4j.xml");
PropertyConfigurator.configure("log4j.xml");
Logger logger = LoggerFactory.getLogger(MyClass.class);
logger.error(message);
src/main/resources
es la "ubicación estándar" para esto.
Actualización: Lo anterior responde la pregunta, pero no es la mejor solución. Vea las otras respuestas y los comentarios sobre esto ... probablemente no envíe sus propias propiedades de registro con el contenedor, sino que deje al cliente (por ejemplo, servidor de aplicaciones, entorno de escenario, etc.) configurar el registro deseado. Por lo tanto, ponerlo en src/test/resources
es mi solución preferida.
Nota: Hablando de dejar la configuración de registro concreta al cliente / usuario, debería considerar reemplazar log4j
con slf4j
en su aplicación.