Pregunta

Quiero que el registro se desplace mientras la aplicación se esté ejecutando, pero quiero que el registro se inicie nuevamente cuando se reinicie la aplicación.

Actualizado: Basado en comentarios de erickson , mi el appender se ve así:

   <appender name="myRFA" class="org.apache.log4j.RollingFileAppender">
      <param name="File" value="my-server.log"/>
      <param name="Append" value="false" />
      <param name="MaxFileSize" value="10MB"/>
      <param name="MaxBackupIndex" value="10"/>
      <layout class="org.apache.log4j.PatternLayout">
         <param name="ConversionPattern"
            value="%d{ISO8601} %p - %t - %c - %m%n"/>
      </layout>
   </appender>

Simplemente agregué la siguiente línea:

<param name="Append" value="false" />

Ahora trunca el archivo de registro base al inicio, pero deja solo los archivos enrollados.

¿Fue útil?

Solución

Si establece el parámetro append en false , el archivo de registro base se "iniciará de nuevo". cuando se reinicia la aplicación. ¿Quiere decir que quiere cualquier '' enrollado ''? ¿también se eliminarán los archivos de registro?

Otros consejos

He escrito un código personalizado para encontrar mi RollingFileAppender (¡lo cual es innecesariamente difícil de acceder en log4j!) que luego hago que se desplace. He adaptado mi código a continuación para un solo uso. Utilizo un código similar a este al inicio de la aplicación para forzar que mis registros se muevan (si no están vacíos), por lo que siempre comienzo en un registro nuevo pero nunca elimino ningún registro que no sea el más antiguo.

Este código toma un registrador determinado y realiza un bucle en la jerarquía del registrador hasta que encuentra un registrador que tiene adjuntos adjuntos. Si nunca lo hace, entonces se rinde. Si lo hace, recorre todos los Appenders conectados a ese Logger y para cada uno que sea un RollingFileAppender, fuerza el roll al registro.

Algo como esto debería ser mucho más fácil de hacer en log4j, pero no he encontrado una forma más sencilla de hacerlo.

public void rollLogFile(Logger logger) {
  while (logger != null && !logger.getAllAppenders().hasMoreElements()) {
    logger = (Logger)logger.getParent();
  }

  if (logger == null) {
    return;
  }

  for (Enumeration e2 = logger.getAllAppenders(); e2.hasMoreElements();) {
    final Appender appender = (Appender)e2.nextElement();
    if (appender instanceof RollingFileAppender) {
      final RollingFileAppender rfa = (RollingFileAppender)appender;
      final File logFile = new File(rfa.getFile());
      if (logFile.length() > 0) {
        rfa.rollOver();
      }
    }
  }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top