2009-05-17 11 views
13

Estoy usando Apache Commons Logging y SLF4J con log4j, pero también quiero usar log4j.properties en un lugar personalizado como conf/log4.properties. Aquí está el problema:Propiedades de Log4j en un lugar personalizado

si uso

PropertyConfigurator.configure("conf/log4j.properties"); 

entonces mi aplicación está vinculada a log4j y en contra del propósito de tener ACL y SLF4J.

¿Cuál es la mejor forma de configurarlo sin que la aplicación sepa nunca qué es la implementación de registro?

Respuesta

24

Creo que lo más fácil es especificar la ubicación del archivo usando la propiedad del sistema log4j.configuration. Adoptando el ejemplo de la Log4J manual:

java -Dlog4j.configuration=conf/log4j.properties -classpath ... 

creo que Log4J encontrará un archivo llamado "log4j.properties" en cualquier parte de la ruta de clase, pero puede ser alucinando. Vale la pena intentar, sin embargo.

+9

realidad, tenía el mismo problema que el PO, pero su solución no funcionó para mí. Tuve que especificar la ubicación del archivo log4j.properties en un formulario de estilo de URL (-Dlog4j.configuration = file: ///my/conf/log4j.properties). – Haes

+1

Upvotes todo el año. Funcionó para mí con solo una barra inclinada después del archivo: -Dlog4j.configuration = file:/C: /JBoss51/jboss-eap-5.1 /..../ log4j.properties en JBOSS 5.1 EAP en una máquina con Windows 7. – CodeClimber

+0

@kdgregory ... ¿dónde especificamos la ubicación del archivo, está en los argumentos de VM en la configuración de ejecución en el proyecto Eclipse O es un archivo de configuración en Tomcat? – MKod

3

Como indica, al invocar PropertiesConfigurator, está vinculando su aplicación a log4j. Sin embargo, la extensión de este empate es bastante limitada. Podría eliminar fácilmente la línea que invoca PropertiesConfigurator y volver a compilar su código. Una vez hecho esto, suponiendo que está utilizando la API de SLF4J para el registro, puede repalce log4j con otra estructura de registro, por ejemplo, logback-classic o j.u.l. simplemente reemplazando archivos jar. Por lo tanto, SLF4J aún cumple su función en gran medida. No arrojaría al bebé con el agua del baño.

1

Puede especificar la ubicación del archivo de configuración con el argumento de VM

-Dlog4j.configuration="file:/C:/workspace3/local/log4j.properties"

Cuestiones relacionadas