2011-02-12 15 views
6

Estoy trabajando en una aplicación web y tengo un requisito para generar archivos de registro en tiempo de ejecución para mi proceso impex. Aquí está el caso de uso Estoy validando un archivo XML y se está manejando un error de validación mediante el controlador de errores personalizado. Este error se transferirá al validador subyacente (validador Jaxb 2.x), por lo que tengo que crear el archivo de registro cuando se crea la instancia de este error. estamos utilizando log4j como API de registroProblema de Log4j FileAppender en el servidor Tomcat

aquí es el código para crear el archivo de registro en tiempo de ejecución

XMLErrorHandler<Object> errorHandler=new XMLErrorHandler<Object>(logFileLocation); 
     logFileName=errorHandler.getLogFileName(); 
     validator.setErrorHandler(errorHandler); 
      validator.validate(source); 

Voy a crear el archivo de registro en el interior XMLErrorHandler constructor ya que este es el único punto que tengo el control aquí es el código para la creación del archivo de registro

FileAppender appender; 
      try { 
       appender = new FileAppender(layout, sb.toString(), false); 
       log.addAppender(appender); 
       log.setAdditivity(false); 
       log.setLevel(Level.WARN); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

todo está funcionando bien y el archivo se crea correctamente, así siendo escrito por el registrador al lugar correspondiente. pero si reinicio mi servidor, el problema real se inicia y el registrador comienza a agregar el contenido del registro no solo a su archivo de registro actual sino también a todos los archivos que se crean para este proceso mientras el servidor se está ejecutando. Aquí están los detalles supongamos que tengo 3 archivos de registro (A, B, C) ya en la ubicación con 3 líneas en cada archivo de registro y C fue el último archivo creado en el proceso. así que cuando reinicio mi servidor (Al resrartar quiero decir que detuve tomcat de la consola) es como anexar datos en previos todos los archivos de registro en este fashin C tiene todavía 3 líneas B tiene ahora 6 líneas A tiene ahora 9 líneas

parece que el appender i Hace creado todavía está abierta o tiene refrence, sin saber exactamente lo que ocurre. cualquier ayuda en este sentido será útil.

Respuesta

1

Problema resuelto .. Problema fue con el appender que estaba usando.Tenía la impresión de que log4j maneja el cierre de appender por sí mismo, pero no estaba haciendo esto (vi el código de FileAppender cuando intentaba cerrar el appender). , así que cerré el appender y resolvió el problema.

0

Necesita más información. Cuando dice "reiniciar mi servidor", ¿eso significa que se reinicia toda la JVM o solo se enruta dentro de la JVM? Tuve un problema similar a esto antes con un daemon personalizado. Cuando pensé que el servidor se reinició realmente no mató las instancias previas del daemon y la JVM, por lo que tuve varias instancias en ejecución, actualizando y en conflicto entre sí.

+0

reiniciando mi servidor único que quiero decir es que, dado que las cosas están en desarrollo por lo que ya solo queda deteniendo mi servidor (Tomcat) de Eclipse y de ponerlo en marcha again.When Yo puedo frenar mi servidor eclipse el comportamiento anterior. Lo que noto es que cuando el servidor se está ejecutando no agrega el contenido en todos los archivos, este comportamiento se produce cuando dejo el servidor. –

0

antes log.addAppender(appender); puede escribir log.removeAllAppenders();

Cuestiones relacionadas