Pregunta

El comportamiento normal de la Log4J RollingFileAppender es rodar cuando el primer mensaje de registro se produce en un día diferente, pero una cierta sensación cálida y difusa con los archivos de registro vacíos para cada fecha, aunque no ocurrió nada. ¿Hay una manera de forzar al rodillo después de la medianoche sin escribir mensajes falsos en el registro?

¿Fue útil?

Solución

He mirado en el código muy de cerca - la simple respuesta es 'no'. El vuelco se activa como parte de la doAppend () fluya en la Appender de -. La única manera de accionar es algo que entrar

Se podía fingir esto con cron: sólo hay un script cron toque el archivo para mañana a las 11:58 como. Que les permite conocer el comportamiento del archivo de registro vacío que estás buscando.

Este es el código que implementa la función de vuelco:

void rollOver() throws IOException {

    /* Compute filename, but only if datePattern is specified */
    if (datePattern == null) {
      errorHandler.error("Missing DatePattern option in rollOver().");
      return;
    }

    String datedFilename = fileName+sdf.format(now);
    // It is too early to roll over because we are still within the
    // bounds of the current interval. Rollover will occur once the
    // next interval is reached.
    if (scheduledFilename.equals(datedFilename)) {
      return;
    }

    // close current file, and rename it to datedFilename
    this.closeFile();

    File target  = new File(scheduledFilename);
    if (target.exists()) {
      target.delete();
    }

    File file = new File(fileName);
    boolean result = file.renameTo(target);
    if(result) {
      LogLog.debug(fileName +" -> "+ scheduledFilename);
    } else {
      LogLog.error("Failed to rename ["+fileName+"] to ["+scheduledFilename+"].");
    }

    try {
      // This will also close the file. This is OK since multiple
      // close operations are safe.
      this.setFile(fileName, false, this.bufferedIO, this.bufferSize);
    }
    catch(IOException e) {
      errorHandler.error("setFile("+fileName+", false) call failed.");
    }
    scheduledFilename = datedFilename;
  }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top