java - mkyong - ¿Cómo hago que log4j borre un registro al inicio?
log4j:warn no appenders could be found for logger (2)
Quiero que el registro se transfiera siempre que la aplicación se esté ejecutando, pero quiero que el registro comience de cero cuando se reinicie la aplicación.
Actualizado: Basado en los comentarios de Erickson, mi 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 los archivos rodados solo.
Si configura el parámetro append
en false
, el archivo de registro base se "iniciará de nuevo" cuando la aplicación se reinicie. ¿Quiere decir que quiere que los archivos de registro "rodados" también se eliminen?
He escrito un código personalizado para encontrar mi RollingFileAppender
(que es innecesariamente difícil de acceder en log4j!) Que luego hago RollingFileAppender
. He adaptado mi código a continuación para un solo uso. Utilizo un código similar al inicio de la aplicación para forzar el roll de mis registros (si no está vacío), así que siempre comienzo en un registro nuevo pero nunca elimino ningún registro, sino el más antiguo.
Este código toma un registrador dado y crea un bucle en la jerarquía del registrador hasta que encuentra un registrador que tiene adjuntos. Si nunca lo hace, entonces se da por vencido. Si lo hace, pasa por todos los anexos adjuntos a ese registrador y para cada uno que es un RollingFileAppender, obliga al registro a rodar.
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();
}
}
}
}