2011-11-03 25 views
6

Me gustaría crear un archivo de registro que se pueda rodar al principio del día siguiente o si se alcanza el tamaño de archivo especificado y el archivo de registro debe estar dentro de la carpeta de fecha. El formato de la carpeta es YYYYMMDD (/20111103/mylogfile.log)¿Cómo controlar el archivo de registro con el tamaño diario de desplazamiento y máximo por log4j?

¿Es posible hacerlo mediante Log4j sin implementar clases personalizadas?

Ahora estoy usando log4j y log4j extra, puse atributo FileNamePattern como se define en la API de log4j a rodar mi archivo de todos los días y establecer el tamaño máximo del archivo de 50 MB.

Mi log4j.xml es:

<appender name="MYAPPENDER" class="org.apache.log4j.rolling.RollingFileAppender"> 
    <param name="encoding" value="UTF-8" /> 
    <param name="append" value="true" /> 
    <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy"> 
     <param name="FileNamePattern" value="${catalina.home}/logs/MY-APP/%d{yyyyMMdd}/MY-APP_%d{yyyyMMddHHmmss}.log" /> 
    </rollingPolicy> 
    <triggeringPolicy class="org.apache.log4j.rolling.SizeBasedTriggeringPolicy"> 
     <param name="maxFileSize" value="50000000" /> 
    </triggeringPolicy> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="[%d{dd/MM/yyyy HH\:mm\:ss}] %-5p [%c.%M(),%4L] - %m%n" /> 
    </layout> 
</appender> 

Resultado de la configuración anterior es que el archivo de registro no se hace rodar a principios del próximos días, pero si el tamaño de archivo alcanza a 50 MB, el archivo de registro se pondrá en marcha.

Por favor ayuda a a asesorarme. m (_ _) m

Respuesta

0

Desde el RollingFileAppender documentation

para ser de cualquier uso, una instancia RollingFileAppender debe tener tanto una RollingPolicy y una TriggeringPolicy establecieron .... TimeBasedRollingPolicy actúa tanto como un RollingPolicy y a TriggeringPolicy.

Por lo tanto, se ignora su SizeBasedTriggeringPolicy ya que TimeBasedRollingPolicy se configuró anteriormente. La única forma de cumplir con sus requisitos será una implementación de clases personalizada.

Además, si el tamaño de un archivo de registro realmente importa, puede considerar usar automatic gzip compression para eliminar SizeBasedTriggeringPolicy y solo hacer que sus registros se publiquen todos los días.

3

Para permitir el balanceo diaria: class = "org.apache.log4j.DailyRollingFileAppender"

y permitir que el tamaño máximo del archivo y el número de archivos de copia de seguridad

<param name="MaxFileSize" value="200MB" /> 
<param name="MaxBackupIndex" value="4" /> 

Pero no puede poner MaxFileSize con DailyRolling, por lo que puede usar el archivo rodante appender

Un ejemplo:

<appender name="MAIN_FA" class="org.apache.log4j.RollingFileAppender"> 
    <param name="File" value="logs/main.log" /> 
    <param name="datePattern" value="'-'yyyy-MM-dd'.log'" /> 
    <param name="append" value="false" /> 
    <param name="Threshold" value="ALL" /> 
    <param name="MaxFileSize" value="200MB" /> 
    <param name="MaxBackupIndex" value="4" /> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d [%t] %-5p %C{6} (%F:%L) - %m%n" /> 
    </layout> 
</appender> 

O usted puede hacer esto http://wiki.apache.org/logging-log4j/DailyRollingFileAppender

6

trabaja a diario para mí con XML en cuestión sólo transformaron en log4j.propiedades equivalentes a rodar encima después de 100KB (para propósitos de prueba):

# Root logger option 
log4j.rootLogger=INFO, file 

# Direct log messages to a file 
log4j.appender.file=org.apache.log4j.rolling.RollingFileAppender 
log4j.appender.file.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy 
log4j.appender.file.RollingPolicy.FileNamePattern=/path/to/logs/%d{yyyyMMdd}/myLog_%d{yyyyMMddHH}.log 
log4j.appender.file.TriggeringPolicy=org.apache.log4j.rolling.SizeBasedTriggeringPolicy 
log4j.appender.file.TriggeringPolicy.maxFileSize=100000 
log4j.appender.file.layout=org.apache.log4j.PatternLayout 
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 
log4j.appender.file.Append=true 

Esto creará un directorio sellos de tiempo (un directorio por día - opcional) con los registros con el siguiente formato (uno por hora para propósitos de prueba - cambio FileNamePattern para satisfacer sus necesidades):

myCompanyLog_20160203 30.log

myCompanyLog_20160203 30.log

Cuestiones relacionadas