Browse Source

update file logging strategy to time+size roll-over

Jason Rivard 2 years ago
parent
commit
9e70938900

+ 3 - 2
server/src/main/java/password/pwm/AppProperty.java

@@ -251,8 +251,9 @@ public enum AppProperty
     LOGGING_OUTPUT_MODE                             ( "logging.logOutputMode" ),
     LOGGING_PACKAGE_LIST                            ( "logging.packageList" ),
     LOGGING_EXTRA_PERIODIC_THREAD_DUMP_INTERVAL     ( "logging.extra.periodicThreadDumpIntervalSeconds" ),
-    LOGGING_FILE_MAX_SIZE                           ( "logging.file.maxSize" ),
-    LOGGING_FILE_MAX_ROLLOVER                       ( "logging.file.maxRollover" ),
+    LOGGING_FILE_MAX_FILE_SIZE                      ( "logging.file.maxFileSize" ),
+    LOGGING_FILE_MAX_TOTAL_SIZE                     ( "logging.file.maxTotalSize" ),
+    LOGGING_FILE_MAX_HISTORY                        ( "logging.file.maxHistory" ),
     LOGGING_FILE_PATH                               ( "logging.file.path" ),
     LOGGING_DEV_OUTPUT                              ( "logging.devOutput.enable" ),
     LOGGING_LOG_CSP_REPORT                          ( "logging.cspReport.enable" ),

+ 2 - 2
server/src/main/java/password/pwm/http/servlet/resource/ResourceServletConfiguration.java

@@ -202,13 +202,13 @@ class ResourceServletConfiguration
                 if ( contents.size() > MAX_RESOURCE_COUNT )
                 {
                     final String entryName = entry.getName();
-                    LOGGER.error( () -> "ignoring resource bundle zip file entry '" + entryName
+                    LOGGER.error( sessionLabel, () -> "ignoring resource bundle zip file entry '" + entryName
                             + "' due to size being greater than max of " + MAX_RESOURCE_SIZE + " bytes " );
                 }
                 else if ( memoryMap.size() > MAX_RESOURCE_COUNT )
                 {
                     final String entryName = entry.getName();
-                    LOGGER.error( () -> "ignoring resource bundle zip file entry '" + entryName
+                    LOGGER.error( sessionLabel, () -> "ignoring resource bundle zip file entry '" + entryName
                             + "' due to total resource count being greater than max of " + MAX_RESOURCE_COUNT );
                 }
                 else

+ 14 - 17
server/src/main/java/password/pwm/util/logging/PwmLogManager.java

@@ -33,9 +33,8 @@ import ch.qos.logback.core.encoder.LayoutWrappingEncoder;
 import ch.qos.logback.core.filter.Filter;
 import ch.qos.logback.core.joran.spi.ConfigurationWatchList;
 import ch.qos.logback.core.joran.util.ConfigurationWatchListUtil;
-import ch.qos.logback.core.rolling.FixedWindowRollingPolicy;
 import ch.qos.logback.core.rolling.RollingFileAppender;
-import ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy;
+import ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy;
 import ch.qos.logback.core.util.FileSize;
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import org.slf4j.LoggerFactory;
@@ -139,6 +138,9 @@ public class PwmLogManager
 
         initConsoleLogger( config, pwmLogSettings.getStdoutLevel() );
         initFileLogger( config, pwmLogSettings.getFileLevel(), pwmApplicationPath );
+
+        // for debugging
+        // StatusPrinter.print( getLoggerContext() );
     }
 
     static PwmLogLevel getLowestLogLevelConfigured()
@@ -281,20 +283,16 @@ public class PwmLogManager
                 }
 
                 final String fileName = logDirectory.getAbsolutePath() + File.separator + PwmConstants.PWM_APP_NAME + ".log";
-                final String fileNamePattern = logDirectory.getAbsolutePath() + File.separator + PwmConstants.PWM_APP_NAME + ".log.%i.zip";
+                final String fileNamePattern = logDirectory.getAbsolutePath() + File.separator + PwmConstants.PWM_APP_NAME + ".log.%d{yyyy-MM-dd}.%i.gz";
 
                 final LoggerContext logCtx = getLoggerContext();
 
-                final FixedWindowRollingPolicy rollingPolicy = new FixedWindowRollingPolicy();
-                rollingPolicy.setContext( logCtx );
-                rollingPolicy.setMinIndex( 1 );
-                rollingPolicy.setMaxIndex( Integer.parseInt( config.readAppProperty( AppProperty.LOGGING_FILE_MAX_ROLLOVER ) )  );
-                rollingPolicy.setFileNamePattern( fileNamePattern );
-
-                final SizeBasedTriggeringPolicy<ILoggingEvent> sizeBasedTriggeringPolicy = new SizeBasedTriggeringPolicy<>();
-                sizeBasedTriggeringPolicy.setMaxFileSize( FileSize.valueOf( config.readAppProperty( AppProperty.LOGGING_FILE_MAX_SIZE ) ) );
-                sizeBasedTriggeringPolicy.setContext( logCtx );
-                sizeBasedTriggeringPolicy.start();
+                final SizeAndTimeBasedRollingPolicy<ILoggingEvent> sizeAndTimeBasedRollingPolicy = new SizeAndTimeBasedRollingPolicy<>();
+                sizeAndTimeBasedRollingPolicy.setContext( logCtx );
+                sizeAndTimeBasedRollingPolicy.setFileNamePattern( fileNamePattern );
+                sizeAndTimeBasedRollingPolicy.setMaxFileSize( FileSize.valueOf( config.readAppProperty( AppProperty.LOGGING_FILE_MAX_FILE_SIZE ) ) );
+                sizeAndTimeBasedRollingPolicy.setTotalSizeCap( FileSize.valueOf( config.readAppProperty( AppProperty.LOGGING_FILE_MAX_TOTAL_SIZE ) ) );
+                sizeAndTimeBasedRollingPolicy.setMaxHistory( Integer.parseInt( config.readAppProperty( AppProperty.LOGGING_FILE_MAX_HISTORY ) ) );
 
                 final RollingFileAppender<ILoggingEvent> fileAppender = new RollingFileAppender<>();
                 fileAppender.setContext( logCtx );
@@ -303,12 +301,11 @@ public class PwmLogManager
                 fileAppender.setFile( fileName );
                 fileAppender.setPrudent( false );
                 fileAppender.addFilter( makeLevelFilter( fileLogLevel ) );
-                fileAppender.setRollingPolicy( rollingPolicy );
-                fileAppender.setTriggeringPolicy( sizeBasedTriggeringPolicy );
+                fileAppender.setTriggeringPolicy( sizeAndTimeBasedRollingPolicy );
 
-                rollingPolicy.setParent( fileAppender );
+                sizeAndTimeBasedRollingPolicy.setParent( fileAppender );
+                sizeAndTimeBasedRollingPolicy.start();
 
-                rollingPolicy.start();
                 fileAppender.start();
 
                 attachAppender( fileAppender );

+ 3 - 2
server/src/main/resources/password/pwm/AppProperty.properties

@@ -236,8 +236,9 @@ logging.output.configuration.enable=true
 logging.output.healthCheck.enable=false
 logging.output.runtime.enable=false
 logging.packageList=password.pwm,com.novell.ldapchai,org.jasig.cas.client
-logging.file.maxSize=10MB
-logging.file.maxRollover=50
+logging.file.maxFileSize=100MB
+logging.file.maxTotalSize=1GB
+logging.file.maxHistory=90
 logging.file.path=logs
 newUser.ldap.useTempPassword=auto
 newUser.token.allowPlainPassword=true