<?xml version="1.0" encoding="UTF-8"?>
<!--
  ================================================================================
  eCOMP Portal SDK
  ================================================================================
  Copyright (C) 2017 AT&T Intellectual Property
  ================================================================================
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at
  
       http://www.apache.org/licenses/LICENSE-2.0
  
  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
  ================================================================================
  -->
<configuration scan="true" scanPeriod="3 seconds" debug="true">
  <!-- 
  Logback files for the ECOMP SDK Application "ecomp_app"
  are created in directory ${catalina.base}/logs/ecomp_app;
  e.g., apache-tomcat-8.0.35/logs/ecomp_app/application.log  
  -->
  <!--<jmxConfigurator /> -->

  <!--  specify the component name -->
  <property name="componentName" value="ep_sdk_app"></property>
  
  <!--  specify the base path of the log directory -->
  <property name="logDirPrefix" value="${catalina.base}/logs"></property>
  
  <!-- The directories where logs are written -->
  <property name="logDirectory" value="${logDirPrefix}/${componentName}" />
  <!-- Can easily relocate debug logs by modifying this path. -->
  <property name="debugLogDirectory" value="${logDirPrefix}/${componentName}" />
  
  <!--  log file names -->
  <property name="generalLogName" value="application" />
  <property name="errorLogName" value="error" />
  <property name="metricsLogName" value="metrics" />
  <property name="auditLogName" value="audit" />
  <property name="debugLogName" value="debug" />
  <!--
  These loggers are not used in code (yet). 
  <property name="securityLogName" value="security" />
  <property name="policyLogName" value="policy" />
  <property name="performanceLogName" value="performance" />
  <property name="serverLogName" value="server" />
   -->
  
  <!-- 1610 Logging Fields Format Revisions --> 
  <property name="auditLoggerPattern"
	value="%X{AuditLogBeginTimestamp}|%X{AuditLogEndTimestamp}|%X{RequestId}|%X{ServiceInstanceId}|%thread|%X{VirtualServerName}|%X{ServiceName}|%X{PartnerName}|%X{StatusCode}|%X{ResponseCode}|%X{ResponseDescription}|%X{InstanceUUID}|%.-5level|%X{AlertSeverity}|%X{ServerIPAddress}|%X{Timer}|%X{ServerFQDN}|%X{ClientIPAddress}|%X{ClassName}|%X{Unused}|%X{ProcessKey}|%X{CustomField1}|%X{CustomField2}|%X{CustomField3}|%X{CustomField4}| %msg%n" />

  <property name="metricsLoggerPattern"
	value="%X{MetricsLogBeginTimestamp}|%X{MetricsLogEndTimestamp}|%X{RequestId}|%X{ServiceInstanceId}|%thread|%X{VirtualServerName}|%X{ServiceName}|%X{PartnerName}|%X{TargetEntity}|%X{TargetServiceName}|%X{StatusCode}|%X{ResponseCode}|%X{ResponseDescription}|%X{InstanceUUID}|%.-5level|%X{AlertSeverity}|%X{ServerIPAddress}|%X{Timer}|%X{ServerFQDN}|%X{ClientIPAddress}|%X{ClassName}|%X{Unused}|%X{ProcessKey}|%X{TargetVisualEntity}|%X{CustomField1}|%X{CustomField2}|%X{CustomField3}|%X{CustomField4}| %msg%n" />

  <property name="errorLoggerPattern"
	value="%date{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%X{RequestId}|%thread|%X{ServiceName}|%X{PartnerName}|%X{TargetEntity}|%X{TargetServiceName}|%X{ClassName}|%X{AlertSeverity}|%X{ErrorCode}|%X{ErrorDescription}| %msg%n" />

  <property name="defaultLoggerPattern"
	value="%date{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%X{RequestId}|%thread|%X{ClassName}| %msg%n" />

  <!-- use %class so library logging calls yield their class name -->
  <property name="applicationLoggerPattern"
	value="%date{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%X{RequestId}|%thread|%class{36}| %msg%n" />

  <!-- Example evaluator filter applied against console appender -->
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>${defaultLoggerPattern}</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.TimeBasedRollingPolicy"> 
      <!-- daily rollover --> 
      <fileNamePattern>${logDirectory}/${generalLogName}.%d{yyyy-MM-dd}.log.zip</fileNamePattern> 
 
      <!-- keep 30 days' worth of history capped at 3GB total size --> 
      <maxHistory>30</maxHistory> 
      <totalSizeCap>3GB</totalSizeCap> 
 
    </rollingPolicy>
    <encoder>
      <pattern>${applicationLoggerPattern}</pattern>
    </encoder>
    <filter class="org.openecomp.portalapp.util.CustomLoggingFilter" />
  </appender>
  
  <appender name="asyncEELF" class="ch.qos.logback.classic.AsyncAppender">
    <queueSize>256</queueSize>
    <!-- Class name is part of caller data -->
    <includeCallerData>true</includeCallerData>
    <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.TimeBasedRollingPolicy"> 
      <!-- daily rollover --> 
      <fileNamePattern>${logDirectory}/${auditLogName}.%d{yyyy-MM-dd}.log.zip</fileNamePattern> 
 
      <!-- keep 30 days' worth of history capped at 3GB total size --> 
      <maxHistory>30</maxHistory> 
      <totalSizeCap>3GB</totalSizeCap> 
 
    </rollingPolicy>
    <encoder>
         <pattern>${auditLoggerPattern}</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.TimeBasedRollingPolicy"> 
      <!-- daily rollover --> 
      <fileNamePattern>${logDirectory}/${metricsLogName}.%d{yyyy-MM-dd}.log.zip</fileNamePattern> 
 
      <!-- keep 30 days' worth of history capped at 3GB total size --> 
      <maxHistory>30</maxHistory> 
      <totalSizeCap>3GB</totalSizeCap> 
 
    </rollingPolicy>
    <encoder>
      <pattern>${metricsLoggerPattern}</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.TimeBasedRollingPolicy"> 
      <!-- daily rollover --> 
      <fileNamePattern>${logDirectory}/${errorLogName}.%d{yyyy-MM-dd}.log.zip</fileNamePattern> 
 
      <!-- keep 30 days' worth of history capped at 3GB total size --> 
      <maxHistory>30</maxHistory> 
      <totalSizeCap>3GB</totalSizeCap> 
 
    </rollingPolicy>
    <encoder>
      <pattern>${errorLoggerPattern}</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.TimeBasedRollingPolicy"> 
      <!-- daily rollover --> 
      <fileNamePattern>${logDirectory}/${debugLogName}.%d{yyyy-MM-dd}.log.zip</fileNamePattern> 
 
      <!-- keep 30 days' worth of history capped at 3GB total size --> 
      <maxHistory>30</maxHistory> 
      <totalSizeCap>3GB</totalSizeCap> 
 
    </rollingPolicy>
    <encoder>
      <pattern>${defaultLoggerPattern}</pattern>
    </encoder>
  </appender>
  
  <appender name="asyncEELFDebug" class="ch.qos.logback.classic.AsyncAppender">
    <queueSize>256</queueSize>
    <appender-ref ref="EELFDebug" />
  </appender>
 
  
  <!-- ============================================================================ -->
  <!--  EELF loggers -->
  <!-- ============================================================================ -->
  <logger name="com.att.eelf" level="debug" additivity="false">
    <appender-ref ref="asyncEELF" />
  </logger>
  
  <!--
  <logger name="com.att.eelf.security" level="info" additivity="false">
    <appender-ref ref="asyncEELFSecurity" />
  </logger>
  <logger name="com.att.eelf.perf" level="info" additivity="false">
    <appender-ref ref="asyncEELFPerformance" />
  </logger>
  <logger name="com.att.eelf.server" level="info" additivity="false">
    <appender-ref ref="asyncEELFServer" />
  </logger>
  <logger name="com.att.eelf.policy" level="info" additivity="false">
    <appender-ref ref="asyncEELFPolicy" />
  </logger>
  -->
  
  <logger name="com.att.eelf.audit" level="info" additivity="false">
    <appender-ref ref="asyncEELFAudit" />
  </logger>
  
  <logger name="com.att.eelf.metrics" level="info" additivity="false">
        <appender-ref ref="asyncEELFMetrics" />
  </logger>
    
  <logger name="com.att.eelf.error" level="info" additivity="false">
  	<appender-ref ref="asyncEELFError" />
  </logger>
  
   <logger name="com.att.eelf.debug" level="debug" additivity="false">
        <appender-ref ref="asyncEELFDebug" />
  </logger>
  
    
  <root level="DEBUG">
    <appender-ref ref="asyncEELF" />
  </root>

</configuration>
