Tenemos una aplicación modular donde los módulos tienen sus propios registros log4j (es decir, registro de comunicación y registro de errores). Los appenders y las categorías para estos están configurados en el núcleo log4j XML, pero no todos los módulos están siempre instalados. El DailyRollingFileAppender crea su archivo independientemente del uso y expone el conjunto completo de módulos, aunque no está presente, y como algunos de ellos son específicos del cliente, nos gustaría ocultar los registros que no están en uso. ¿Hay alguna manera de hacer que DailyRollingFileAppender cree su archivo el primer uso en lugar de hacerlo automáticamente al inicio?¿Cómo hago que log4j cree archivos de registro bajo demanda solamente?
Respuesta
Los appenders archivo tienen ninguna opción de crear perezosamente los archivos de registro - el método setFile
crea automáticamente el archivo si no existe ya: ostream = new FileOutputStream(fileName, append);
Vas a tener que ampliar el appender y sobreescribir el archivo de inicialización codifíquese para obtener el comportamiento que busca.
Agradezco que esta respuesta sea un poco tarde, pero he estado luchando contra Log4j demasiado recientemente como para dejar las preguntas pendientes :-) – Andy
Voy a tener que morder esa bala, entonces ... – Mirvnillith
Tuve el mismo problema, así que extendí la clase FileAppender estándar y creé un nuevo LazyFileAppender que es un FileAppender que inicializa el archivo de registro (lo crea solo cuando ocurre la primera operación de escritura).
El LazyFileAppender y algunas otras adiciones a la biblioteca log4j estándar se pueden encontrar en una biblioteca simple que he creado: log4j-additions.
Usted puede mirar en el origen para desarrollar su propia extensión o se puede usar como está ...
extender la clase FileAppender norma no tuvo éxito para mí. Así que he encontrado otra solución que usa appenders programáticamente para crear archivos de registro bajo demanda solamente (y con marca de tiempo en el archivo de nombre). He escrito estos dos métodos:
public void startLog() {
SimpleDateFormat sdf_long = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
FileAppender fa = new FileAppender();
fa.setName("foo");
fa.setFile(sdf_long.format(new Date()) + ".log");
fa.setLayout(new PatternLayout("%d{HH:mm:ss.SSS} %m%n"));
fa.setThreshold(Level.DEBUG);
fa.setAppend(true);
fa.activateOptions();
Logger.getRootLogger().addAppender(fa);
}
public void stopLog() {
Logger.getRootLogger().getAppender("foo").close();
Logger.getRootLogger().removeAppender("foo");
}
presentar mi log4j.properties sólo configura el appender consola. Cuando quiero comenzar a registrar llamo al método startLog(). Cuando quiero iniciar sesión en otro archivo, llamo primero a stopLog() y luego al método startLog().
- 1. Cómo recargar Ext.tree.TreePanel bajo demanda?
- 2. Instalar gema bajo demanda
- 3. Ocultar barra inferior bajo demanda
- 4. Análisis de virus bajo demanda Windows
- 5. Múltiples archivos de registro con log4j
- 6. Carga bajo demanda con telerik radtreeview
- 7. ¿Hay un analizador de archivos de registro para archivos log4j?
- 8. Android - ListView - llamando al getView() bajo demanda
- 9. Comprimir archivos Log4j
- 10. ¿Hay alguna forma de hacer un barrido WCF bajo demanda?
- 11. PRISM y WPF cómo agregar un módulo bajo demanda
- 12. Log4j bajo OSGI (Eclipse RCP)
- 13. Cómo configurar un apilador de archivos log4j que rueda el archivo de registro cada 15 minutos
- 14. crear mediante programación diferentes archivos de registro utilizando log4j
- 15. ¿Log4j proporciona algún mecanismo para el registro diario de archivos?
- 16. jsTree - subnodos de carga a través de ajax bajo demanda
- 17. Encontrar archivo de registro Log4J
- 18. Log4j archivos múltiples
- 19. Cómo configurar log4j para registrar diferentes niveles de registro en diferentes archivos para el mismo registrador
- 20. Mostrar u ocultar una barra de título bajo demanda
- 21. Registro de Java vs Log4J
- 22. Cómo evitar que Visual Studio cree automáticamente archivos de solución
- 23. Analizar un archivo de registro de log4j
- 24. Creando una fila personalizada bajo demanda con GWT CellTableBuilder
- 25. log4j: registro específico del paquete
- 26. ¿Cómo saber qué archivos cree que IE son "no seguros"?
- 27. Cómo evitar que vim cree (y abandone) archivos temporales?
- 28. ¿Cómo puedo evitar que Java cree archivos hsperfdata?
- 29. log4j y weblogic: mensajes de registro duplicados
- 30. registro de Django bajo UWSGI
¿Por qué no excluye bloques para componentes deshabilitados en el núcleo XML? – newtover
Estamos implementando la configuración de log4j oonce y luego los módulos se pueden agregar más adelante. A medida que dejamos abiertos los detalles de log4j para cambios locales, tenemos dificultades para modificar el archivo en instalaciones posteriores. Y sí, tenemos un requisito de alto nivel de automatización de instalación. – Mirvnillith