<configuration scan="true" scanPeriod="3 seconds">
  <!--<jmxConfigurator /> -->
  <!-- directory path for all other type logs -->
  <property name="logDir" value="logs" />
  
  <!-- directory path for debugging type logs -->
  <property name="debugDir" value="debug-logs" />
  
  <!--  specify the component name -->
  <property name="componentName" value="SDC" />
  
  <!--  log file names -->
  <property name="generalLogName" value="application" />
  <property name="securityLogName" value="security" />
  <property name="performanceLogName" value="performance" />
  <property name="serverLogName" value="server" />
  <property name="policyLogName" value="policy" />
  <property name="errorLogName" value="error" />
  <property name="metricsLogName" value="metrics" />
  <property name="auditLogName" value="audit" />
  <property name="debugLogName" value="debug" />
  
  <property name="defaultPattern" value="%date{ISO8601,UTC}|%X{RequestId}|%X{ServiceInstanceId}|%thread|%X{VirtualServerName}|%X{ServiceName}|%X{InstanceUUID}|%.-5level|%X{AlertSeverity}|%X{ServerIPAddress}|%X{ServerFQDN}|%X{RemoteHost}|%X{ClassName}|%X{Timer}| %msg%n" />
  
  <property name="debugLoggerPattern" value="%date{ISO8601,UTC}|%X{RequestId}|%X{ServiceInstanceId}|%thread|%X{VirtualServerName}|%X{ServiceName}|%X{InstanceUUID}|%.-5level|%X{AlertSeverity}|%X{ServerIPAddress}|%X{ServerFQDN}|%X{RemoteHost}|%X{ClassName}|%X{Timer}|[%caller{3}]| %msg%n" />
  
  <property name="logDirectory" value="${logDir}/${componentName}" />
  <property name="debugLogDirectory" value="${debugDir}/${componentName}" />
  
  
  <!-- Example evaluator filter applied against console appender -->
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>${defaultPattern}</pattern>
    </encoder>
  </appender>

  <!-- ============================================================================ -->
  <!-- EELF Appenders -->
  <!-- ============================================================================ -->

  <!-- The EELFAppender is used to record events to the general application 
    log -->
    
    
  <appender name="EELF"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${logDirectory}/${generalLogName}.log</file>
    <rollingPolicy
      class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
      <fileNamePattern>${logDirectory}/${generalLogName}.%i.log.zip
      </fileNamePattern>
      <minIndex>1</minIndex>
      <maxIndex>9</maxIndex>
    </rollingPolicy>
    <triggeringPolicy
      class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
      <maxFileSize>5MB</maxFileSize>
    </triggeringPolicy>
    <encoder>
      <pattern>${defaultPattern}</pattern>
    </encoder>
  </appender>
  
  <appender name="asyncEELF" class="ch.qos.logback.classic.AsyncAppender">
    <queueSize>256</queueSize>
    <appender-ref ref="EELF" />
  </appender>

  <!-- EELF Security Appender. This appender is used to record security events 
    to the security log file. Security events are separate from other loggers 
    in EELF so that security log records can be captured and managed in a secure 
    way separate from the other logs. This appender is set to never discard any 
    events. -->
  <appender name="EELFSecurity"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${logDirectory}/${securityLogName}.log</file>
    <rollingPolicy
      class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
      <fileNamePattern>${logDirectory}/${securityLogName}.%i.log.zip
      </fileNamePattern>
      <minIndex>1</minIndex>
      <maxIndex>9</maxIndex>
    </rollingPolicy>
    <triggeringPolicy
      class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
      <maxFileSize>5MB</maxFileSize>
    </triggeringPolicy>
    <encoder>
      <pattern>${defaultPattern}</pattern>
    </encoder>
  </appender>
  
  <appender name="asyncEELFSecurity" class="ch.qos.logback.classic.AsyncAppender">
    <queueSize>256</queueSize>
    <discardingThreshold>0</discardingThreshold>
    <appender-ref ref="EELFSecurity" />
  </appender>

  <!-- EELF Performance Appender. This appender is used to record performance 
    records. -->
  <appender name="EELFPerformance"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${logDirectory}/${performanceLogName}.log</file>
    <rollingPolicy
      class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
      <fileNamePattern>${logDirectory}/${performanceLogName}.%i.log.zip
      </fileNamePattern>
      <minIndex>1</minIndex>
      <maxIndex>9</maxIndex>
    </rollingPolicy>
    <triggeringPolicy
      class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
      <maxFileSize>5MB</maxFileSize>
    </triggeringPolicy>
    <encoder>
      <outputPatternAsHeader>true</outputPatternAsHeader>
      <pattern>${defaultPattern}</pattern>
    </encoder>
  </appender>
  <appender name="asyncEELFPerformance" class="ch.qos.logback.classic.AsyncAppender">
    <queueSize>256</queueSize>
    <appender-ref ref="EELFPerformance" />
  </appender>

  <!-- EELF Server Appender. This appender is used to record Server related 
    logging events. The Server logger and appender are specializations of the 
    EELF application root logger and appender. This can be used to segregate Server 
    events from other components, or it can be eliminated to record these events 
    as part of the application root log. -->
  <appender name="EELFServer"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${logDirectory}/${serverLogName}.log</file>
    <rollingPolicy
      class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
      <fileNamePattern>${logDirectory}/${serverLogName}.%i.log.zip
      </fileNamePattern>
      <minIndex>1</minIndex>
      <maxIndex>9</maxIndex>
    </rollingPolicy>
    <triggeringPolicy
      class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
      <maxFileSize>5MB</maxFileSize>
    </triggeringPolicy>
    <encoder>
        <pattern>${defaultPattern}</pattern>
    </encoder>
  </appender>
  <appender name="asyncEELFServer" class="ch.qos.logback.classic.AsyncAppender">
    <queueSize>256</queueSize>
    <appender-ref ref="EELFServer" />
  </appender>

  
  <!-- EELF Policy Appender. This appender is used to record Policy engine 
    related logging events. The Policy logger and appender are specializations 
    of the EELF application root logger and appender. This can be used to segregate 
    Policy engine events from other components, or it can be eliminated to record 
    these events as part of the application root log. -->
  <appender name="EELFPolicy"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${logDirectory}/${policyLogName}.log</file>
    <rollingPolicy
      class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
      <fileNamePattern>${logDirectory}/${policyLogName}.%i.log.zip
      </fileNamePattern>
      <minIndex>1</minIndex>
      <maxIndex>9</maxIndex>
    </rollingPolicy>
    <triggeringPolicy
      class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
      <maxFileSize>5MB</maxFileSize>
    </triggeringPolicy>
    <encoder>
        <pattern>${defaultPattern}</pattern>
    </encoder>
  </appender>
  <appender name="asyncEELFPolicy" class="ch.qos.logback.classic.AsyncAppender">
    <queueSize>256</queueSize>
    <appender-ref ref="EELFPolicy" />
  </appender>
  
  
  <!-- EELF Audit Appender. This appender is used to record audit engine 
    related logging events. The audit logger and appender are specializations 
    of the EELF application root logger and appender. This can be used to segregate 
    Policy engine events from other components, or it can be eliminated to record 
    these events as part of the application root log. -->
    
  <appender name="EELFAudit"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${logDirectory}/${auditLogName}.log</file>
    <rollingPolicy
      class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
      <fileNamePattern>${logDirectory}/${auditLogName}.%i.log.zip
      </fileNamePattern>
      <minIndex>1</minIndex>
      <maxIndex>9</maxIndex>
    </rollingPolicy>
    <triggeringPolicy
      class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
      <maxFileSize>5MB</maxFileSize>
    </triggeringPolicy>
    <encoder>
         <pattern>${defaultPattern}</pattern>
    </encoder>
  </appender>
  <appender name="asyncEELFAudit" class="ch.qos.logback.classic.AsyncAppender">
    <queueSize>256</queueSize>
    <appender-ref ref="EELFAudit" />
  </appender>

<appender name="EELFMetrics"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${logDirectory}/${metricsLogName}.log</file>
    <rollingPolicy
      class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
      <fileNamePattern>${logDirectory}/${metricsLogName}.%i.log.zip
      </fileNamePattern>
      <minIndex>1</minIndex>
      <maxIndex>9</maxIndex>
    </rollingPolicy>
    <triggeringPolicy
      class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
      <maxFileSize>5MB</maxFileSize>
    </triggeringPolicy>
    <encoder>
      <!-- <pattern>"%d{HH:mm:ss.SSS} [%thread] %-5level %logger{1024} - 
        %msg%n"</pattern> -->
      <pattern>${defaultPattern}</pattern>
    </encoder>
  </appender>
  
  
  <appender name="asyncEELFMetrics" class="ch.qos.logback.classic.AsyncAppender">
    <queueSize>256</queueSize>
    <appender-ref ref="EELFMetrics"/>
  </appender>
   
  <appender name="EELFError"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${logDirectory}/${errorLogName}.log</file>
    <rollingPolicy
      class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
      <fileNamePattern>${logDirectory}/${errorLogName}.%i.log.zip
      </fileNamePattern>
      <minIndex>1</minIndex>
      <maxIndex>9</maxIndex>
    </rollingPolicy>
    <triggeringPolicy
      class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
      <maxFileSize>5MB</maxFileSize>
    </triggeringPolicy>
    <encoder>
      <pattern>${defaultPattern}</pattern>
    </encoder>
  </appender>
  
  <appender name="asyncEELFError" class="ch.qos.logback.classic.AsyncAppender">
    <queueSize>256</queueSize>
    <appender-ref ref="EELFError"/>
  </appender>
  
   <appender name="EELFDebug"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${debugLogDirectory}/${debugLogName}.log</file>
    <rollingPolicy
      class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
      <fileNamePattern>${debugLogDirectory}/${debugLogName}.%i.log.zip
      </fileNamePattern>
      <minIndex>1</minIndex>
      <maxIndex>9</maxIndex>
    </rollingPolicy>
    <triggeringPolicy
      class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
      <maxFileSize>5MB</maxFileSize>
    </triggeringPolicy>
    <encoder>
      <pattern>${debugLoggerPattern}</pattern>
    </encoder>
  </appender>
  
  <appender name="asyncEELFDebug" class="ch.qos.logback.classic.AsyncAppender">
    <queueSize>256</queueSize>
    <appender-ref ref="EELFDebug" />
    <includeCallerData>true</includeCallerData>
  </appender>
 
  
  <!-- ============================================================================ -->
  <!--  EELF loggers -->
  <!-- ============================================================================ -->
  <logger name="org.openecomp.eelf" level="info" additivity="false">
    <appender-ref ref="asyncEELF" />
  </logger>
  <logger name="org.openecomp.eelf.security" level="info" additivity="false">
    <appender-ref ref="asyncEELFSecurity" />
  </logger>
  <logger name="org.openecomp.eelf.perf" level="info" additivity="false">
    <appender-ref ref="asyncEELFPerformance" />
  </logger>
  <logger name="org.openecomp.eelf.server" level="info" additivity="false">
    <appender-ref ref="asyncEELFServer" />
  </logger>
  <logger name="org.openecomp.eelf.policy" level="info" additivity="false">
    <appender-ref ref="asyncEELFPolicy" />
  </logger>

  <logger name="org.openecomp.eelf.audit" level="info" additivity="false">
    <appender-ref ref="asyncEELFAudit" />
  </logger>
  
  <logger name="org.openecomp.eelf.metrics" level="info" additivity="false">
        <appender-ref ref="asyncEELFMetrics" />
  </logger>
 
 
   <logger name="org.openecomp.eelf.error" level="error" additivity="false">
  <appender-ref ref="asyncEELFError" />
  </logger>
  
   <logger name="org.openecomp.eelf.debug" level="debug" additivity="false">
        <appender-ref ref="asyncEELFDebug" />
  </logger>

  <appender name="DISPATCHER" class="org.openecomp.core.logging.logback.DispatchingAppender">
    <discriminator class="org.openecomp.core.logging.logback.EventTypeDiscriminator"/>
    <appenderNamePattern>asyncEELF%s</appenderNamePattern>
  </appender>
  
  <root level="DEBUG" additivity="false">
    <appender-ref ref="DISPATCHER" />
  </root>

</configuration>