<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="5 seconds">

    <property scope="system" name="OPENECOMP-component-name" value="ASDC" />
    <property scope="system" name="OPENECOMP-subcomponent-name" value="ASDC-BE" />
    <property file="${config.home}/catalog-be/configuration.yaml" />
    <property scope="context" name="enable-all-log" value="false" />

    <!--statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />
    <include resource="asdc_debug_logback.xml"/-->

    <!-- value used by pattern field list (| - is inter-field separator, || - unavailable or not applicable field value) (m - mandatory, o- optional)-->
    <!--timestamp(m)| requestID(m)| serviceInstanceID(o)| threadID(m)| physicalServerName(o)| serviceName(m)| userID(m)| logLevel(m)| severity(o)| serverIpAddress(m)| serverName(m)| clientIpAddress(o)| className(m)| timer(o)| detailedMessage(o)-->
    <property name="default-log-pattern"
              value="%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%X{uuid}|%X{serviceInstanceID}|%thread||${OPENECOMP-subcomponent-name}|%X{userId}|%level|%X{alarmSeverity}|%X{localAddr}|${beFqdn}|%X{remoteAddr}|%logger{35}|%X{timer}|ActivityType=&lt;%M&gt;, Desc=&lt;%msg&gt;%n" />

    <property name="asdc-debug-log-pattern" value="%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%X{RequestId}|%msg %n"/>

    <!-- All log -->
    <if condition='property("enable-all-log").equalsIgnoreCase("true")'>
        <then>
            <appender name="ALL_ROLLING"
                      class="ch.qos.logback.core.rolling.RollingFileAppender">
                <file>${log.home}/${OPENECOMP-component-name}/${OPENECOMP-subcomponent-name}/all.log
                </file>

                <rollingPolicy
                        class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
                    <fileNamePattern>${log.home}/${OPENECOMP-component-name}/${OPENECOMP-subcomponent-name}/all.log.%i
                    </fileNamePattern>
                    <minIndex>1</minIndex>
                    <maxIndex>10</maxIndex>
                </rollingPolicy>

                <triggeringPolicy
                        class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                    <maxFileSize>20MB</maxFileSize>
                </triggeringPolicy>
                <encoder>
                    <pattern>${default-log-pattern}</pattern>
                </encoder>
            </appender>

            <appender name="ASYNC_ALL" class="ch.qos.logback.classic.AsyncAppender">
                <appender-ref ref="ALL_ROLLING" />
            </appender>
        </then>
    </if>

    <!-- Error log -->
    <appender name="ERROR_ROLLING"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.home}/${OPENECOMP-component-name}/${OPENECOMP-subcomponent-name}/Error.log
        </file>

        <!-- Audit messages filter - deny audit messages -->
        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
            <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
                <marker>AUDIT_MARKER</marker>
            </evaluator>
            <onMismatch>NEUTRAL</onMismatch>
            <onMatch>DENY</onMatch>
        </filter>

        <!-- Transaction messages filter - deny Transaction messages -->
        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
            <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
                <marker>TRANSACTION_MARKER</marker>
            </evaluator>
            <onMismatch>NEUTRAL</onMismatch>
            <onMatch>DENY</onMatch>
        </filter>

        <!-- deny all events with a level below INFO, that is TRACE and DEBUG -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>

        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>${log.home}/${OPENECOMP-component-name}/${OPENECOMP-subcomponent-name}/Error.log.%i
            </fileNamePattern>
            <minIndex>1</minIndex>
            <maxIndex>10</maxIndex>
        </rollingPolicy>

        <triggeringPolicy
                class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>20MB</maxFileSize>
        </triggeringPolicy>
        <encoder>
            <pattern>${default-log-pattern}</pattern>
        </encoder>
    </appender>

    <!-- Debug log -->
    <appender name="DEBUG_ROLLING"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.home}/${OPENECOMP-component-name}/${OPENECOMP-subcomponent-name}/debug.log
        </file>

        <!-- No need to deny audit messages - they are INFO only, will be denied
            anyway -->
        <!-- Transaction messages filter - deny Transaction messages, there are
            some DEBUG level messages among them -->
        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
            <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
                <marker>TRANSACTION_MARKER</marker>
            </evaluator>
            <onMismatch>NEUTRAL</onMismatch>
            <onMatch>DENY</onMatch>
        </filter>

        <!-- accept DEBUG and TRACE level -->
        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
            <evaluator class="ch.qos.logback.classic.boolex.GEventEvaluator">
                <expression>
                    e.level.toInt() &lt;= DEBUG.toInt()
                </expression>
            </evaluator>
            <OnMismatch>DENY</OnMismatch>
            <OnMatch>NEUTRAL</OnMatch>
        </filter>

        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>${log.home}/${OPENECOMP-component-name}/${OPENECOMP-subcomponent-name}/debug.log.%i
            </fileNamePattern>
            <minIndex>1</minIndex>
            <maxIndex>10</maxIndex>
        </rollingPolicy>

        <triggeringPolicy
                class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>20MB</maxFileSize>
        </triggeringPolicy>
        <encoder>
            <pattern>${default-log-pattern}</pattern>
        </encoder>
    </appender>

    <!-- Debug log -->
    <appender name="PACKAGE_DEBUG_ROLLING"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.home}/${OPENECOMP-component-name}/${OPENECOMP-subcomponent-name}/debug_by_package.log
        </file>

        <!-- No need to deny audit messages - they are INFO only, will be denied
            anyway -->
        <!-- Transaction messages filter - deny Transaction messages, there are
            some DEBUG level messages among them -->
        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
            <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
                <marker>TRANSACTION_MARKER</marker>
            </evaluator>
            <onMismatch>NEUTRAL</onMismatch>
            <onMatch>DENY</onMatch>
        </filter>

        <!-- accept DEBUG and TRACE level -->
        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
            <evaluator class="ch.qos.logback.classic.boolex.GEventEvaluator">
                <expression>
                    e.level.toInt() &lt;= DEBUG.toInt()
                </expression>
            </evaluator>
            <OnMismatch>DENY</OnMismatch>
            <OnMatch>NEUTRAL</OnMatch>
        </filter>

        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>${log.home}/${OPENECOMP-component-name}/${OPENECOMP-subcomponent-name}/debug_by_package.log.%i
            </fileNamePattern>
            <minIndex>1</minIndex>
            <maxIndex>10</maxIndex>
        </rollingPolicy>

        <triggeringPolicy
                class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>20MB</maxFileSize>
        </triggeringPolicy>
        <encoder>
            <pattern>${asdc-debug-log-pattern}</pattern>
        </encoder>
    </appender>

    <!-- Audit log -->
    <appender name="AUDIT_ROLLING"
              class="ch.qos.logback.core.rolling.RollingFileAppender">

        <file>${log.home}/${OPENECOMP-component-name}/${OPENECOMP-subcomponent-name}/audit.log
        </file>

        <!-- Audit messages filter - accept audit messages -->
        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
            <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
                <marker>AUDIT_MARKER</marker>
            </evaluator>
            <onMismatch>DENY</onMismatch>
            <onMatch>ACCEPT</onMatch>
        </filter>

        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>${log.home}/${OPENECOMP-component-name}/${OPENECOMP-subcomponent-name}/audit.log.%i
            </fileNamePattern>
            <minIndex>1</minIndex>
            <maxIndex>10</maxIndex>
        </rollingPolicy>

        <triggeringPolicy
                class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>20MB</maxFileSize>
        </triggeringPolicy>
        <encoder>
            <pattern>${default-log-pattern}</pattern>
        </encoder>
    </appender>

    <!-- SdncTransaction log -->
    <appender name="TRANSACTION_ROLLING"
              class="ch.qos.logback.core.rolling.RollingFileAppender">

        <file>${log.home}/${OPENECOMP-component-name}/${OPENECOMP-subcomponent-name}/transaction.log
        </file>

        <!-- Transaction messages filter - accept audit messages -->
        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
            <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
                <marker>TRANSACTION_MARKER</marker>
            </evaluator>
            <onMismatch>DENY</onMismatch>
            <onMatch>ACCEPT</onMatch>
        </filter>

        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>${log.home}/${OPENECOMP-component-name}/${OPENECOMP-subcomponent-name}/transaction.log.%i
            </fileNamePattern>
            <minIndex>1</minIndex>
            <maxIndex>10</maxIndex>
        </rollingPolicy>

        <triggeringPolicy
                class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>20MB</maxFileSize>
        </triggeringPolicy>
        <encoder>
            <pattern>${default-log-pattern}</pattern>
        </encoder>
    </appender>

    <!-- Asynchronicity Configurations -->
    <appender name="ASYNC_DEBUG" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="DEBUG_ROLLING" />
    </appender>

    <appender name="ASYNC_TRANSACTION" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="TRANSACTION_ROLLING" />
    </appender>

    <appender name="ASYNC_ERROR" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="ERROR_ROLLING" />
    </appender>


    <root level="INFO">
        <appender-ref ref="ASYNC_ERROR" />
        <appender-ref ref="ASYNC_DEBUG" />
        <appender-ref ref="AUDIT_ROLLING" />
        <appender-ref ref="ASYNC_TRANSACTION" />
        <if condition='property("enable-all-log").equalsIgnoreCase("true")'>
            <then>
                <appender-ref ref="ALL_ROLLING" />
            </then>
        </if>
    </root>

    <logger name="org.openecomp.sdc" level="INFO" />

    <logger name="org.openecomp.sdc.vendorsoftwareproduct" level="DEBUG" additivity ="false">
        <appender-ref ref="PACKAGE_DEBUG_ROLLING" />
    </logger>

    <logger name="org.openecomp.sdc.vendorlicense" level="DEBUG" additivity ="false">
        <appender-ref ref="PACKAGE_DEBUG_ROLLING" />
    </logger>
</configuration>