Log file Rolling Issue

The logback configuration file defines Logger and Appender class instances used by Spectrum.

The spectrum-server.log file contains the logs. On Windows platform the log file rollover stops after reaching the file size limit specified in the maxFileSize parameter.

To resolve this issue, follow these steps.

  1. Stop the server.
  2. Take a backup of the spectrum-server.log (and other log files, if any) and logback.xml files.
    • spectrum-server.log is located at \server\logs.
    • logback.xml is located at \server\conf.
    After creating the backup, delete the spectrum-server.log file and other log files, if any.
  3. Go to \server\conf.
  4. Edit the logback.xml file to delete all the existing content, then copy the content from the example section into this file.
  5. Save and restart the server.

Example:

In this example, the maxFileSize limit is specified as 10 MB. Once the specified file size is reached, the new log file(s) will be generated with this format, spectrumserver-yyyy-mm-dd.

You can copy the following content and paste it into the logback.xml file.

<configuration debug="false">		        
<!-- ================================= -->
<!-- Preserve messages in a local file -->
<!-- ================================= -->	        
<property name="LOG_ROOT" value="../logs" />
<property name="LOG_FILE_NAME" value="spectrumserver" />		        

<!-- main log file-->
<appender name="RootFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_ROOT}/${LOG_FILE_NAME}-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<!-- each archived file's size will be max 10MB -->
<maxFileSize>10MB</maxFileSize>    
<!-- 30 days to keep -->
<maxHistory>30</maxHistory>
<!-- total size of all archive files, if total size > 2GB, it will delete old archived file -->
<totalSizeCap>2GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>  
		        
<!-- audit appenders -->
<appender name="NOTIFICATION" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>../logs/notification.log</file>
<encoder>
<pattern>%d %-5p %m%n</pattern>
</encoder>
<append>true</append>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>10MB</maxFileSize>
</triggeringPolicy>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>../logs/notification.log.%i</fileNamePattern>
<maxIndex>1</maxIndex>
</rollingPolicy>
</appender>
		        
<appender name="PERFORMANCE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>../logs/performance.log</file>
<encoder>
<pattern>%d [%c{0}] %m%n</pattern>
</encoder>
<append>true</append>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>10MB</maxFileSize>
</triggeringPolicy>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>../logs/performance.log.%i</fileNamePattern>
<maxIndex>5</maxIndex>
</rollingPolicy>
</appender>
		        
 <!--
  <appender name="HAZELCAST" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>../logs/hazelcast.log</file>
    <encoder>
      <pattern>%d [%c{0}] %m%n</pattern>
    </encoder>
    <append>true</append>
    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
      <maxFileSize>100MB</maxFileSize>
    </triggeringPolicy>
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
      <fileNamePattern>../logs/hazelcast.log.%i</fileNamePattern>
      <maxIndex>5</maxIndex>
    </rollingPolicy>
  </appender>
  -->
		        
<!-- ============================== -->
<!-- Append messages to the console -->
<!-- ============================== -->
		        
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%-5p [%c{0}] %m%n</pattern>
</encoder>
<filter class="com.pb.spectrum.platform.server.common.logging.LogbackFilter"/>
</appender>
		        
<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
<resetJUL>true</resetJUL>
</contextListener>
		        
 <!-- ================ -->
 <!-- Limit categories -->
 <!-- ================ -->
		        
<logger name="STDOUT" level="INFO"/>		        
<logger name="STDERR" level="INFO"/>
		        
<logger name="com.g1" level="INFO"/>
		        
<logger name="com.pb.spectrum" level="INFO"/>
		        
<logger name="com.pb.spectrum.common.spring.ResolvingPropertiesFactoryBean" level="WARN"/>
		        
<logger name="com.pb.spectrum.common.springintegration" level="WARN"/>
		        
<logger name="com.g1.dcg.services.servlet" level="WARN"/>
		        
<logger name="ch.qos.logback" level="WARN"/>
		        
<logger name="org.apache.commons" level="INFO"/>
		        
<logger name="org.apache.cxf" level="ERROR"/>
		        
<logger name="com.caucho" level="ERROR"/>
		        
<logger name="com.pb.spectrum.platform.server.common.persistence.core.transaction" level="INFO"/>
		        
<!--<logger name="camel.QueueProducer" level="DEBUG"/>-->
<!--<logger name="camel.QueueConsumer" level="DEBUG"/>-->
<!--<logger name="camel.TopicProducer" level="DEBUG"/>-->
<!--<logger name="camel.TopicConsumer" level="DEBUG"/>-->
		        
<!--<logger name="com.pb.spectrum.platform.server.common.remoting.RemoteManagerMethodInvokerAspect" level="DEBUG"/>-->
<!--<logger name="com.pb.spectrum.platform.server.config.ProxyLoggingAspect" level="DEBUG"/>-->
		        
<!--<logger name="com.pb.spectrum.platform.server.common.persistence.core.GraphSupport" level="DEBUG"/>-->
<!--<logger name="com.pb.spectrum.platform.server.common.persistence.graph.neo4j.cypher.query.CypherGraphQueryExecutor" level="DEBUG"/>-->
		        
<logger name="org.neo4j" level="WARN"/>
	        
<logger name="org.eclipse.jetty" level="ERROR"/>
		        
<logger name="org.apache.xalan" level="INFO"/>
		        
<logger name="org.apache.ddlutils.util.JdbcSupport" level="ERROR"/>
		        
<logger name="org.springframework" level="ERROR"/>
		        
<logger name="org.springframework.security.access.intercept.aspectj.AspectJSecurityInterceptor" level="ERROR"/>
		        
<logger name="org.apache.directory.server.schema.registries.DefaultOidRegistry" level="ERROR"/>
		        
<logger name="org.apache.directory.server.core.interceptor.context.SearchingOperationContext" level="ERROR"/>
		        
<logger name="org.apache.ddlutils.platform" level="ERROR"/>
		        
<logger name="org.springframework.integration.gateway.GatewayProxyFactoryBean$MethodInvocationGateway" level="ERROR"/>
		        
<logger name="org.pac4j.core.client.BaseClient" level="ERROR"/>
		        
<logger name="org.teiid.SECURITY" level="ERROR"/>
		        
<logger name="org.teiid.COMMAND_LOG" level="WARN"/>
		        
<!-- <logger name="com.g1.dcg.server.security.web.filters.LoggingFilter" level="DEBUG"/>-->
		        
<logger name="audit.notification" additivity="false" level="INFO">
<appender-ref ref="NOTIFICATION"/>
</logger>
		        
<logger name="performance" additivity="false" level="INFO">
<appender-ref ref="PERFORMANCE"/>
</logger>

<!--
  <logger name="com.hazelcast" additivity="false" level="DEBUG">
    <appender-ref ref="HAZELCAST"/>
  </logger>
  -->
		        
<root level="WARN">
<appender-ref ref="CONSOLE"/>
<!--<appender-ref ref="FILE"/>-->
<appender-ref ref="RootFileAppender"/>
</root>
		        
</configuration>