<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
    <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
        <resetJUL>true</resetJUL>
    </contextListener>

    <jmxConfigurator/>

    <conversionRule conversionWord="instanceId" converterClass="org.sfera.ppbd.logback.InstanceIdSupplier" />


    <appender name="osgi" class="org.ops4j.pax.logging.logback.internal.bridges.PaxAppenderDelegate">
        <filter class="org.sonatype.nexus.pax.logging.NexusLogFilter"/>
    </appender>

    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <Append>true</Append>
        <encoder class="net.logstash.logback.encoder.LogstashEncoder">
            <timestampPattern>[UNIX_TIMESTAMP_AS_STRING]</timestampPattern>
            <customFields>{"product": "ppbd","serviceName": "ppdl-back", "serviceVersion": "${RELEASE_VERSION}"}</customFields>
            <includeMdc>true</includeMdc>
            <provider class="net.logstash.logback.composite.loggingevent.LoggingEventPatternJsonProvider">
                <pattern>
                    {
                    "serviceId": "%instanceId"
                    }
                </pattern>
            </provider>
            <fieldNames>
                <timestamp>localTime</timestamp>
                <thread>threadName</thread>
                <version>version</version>
                <message>text</message>
                <logger>loggerName</logger>
                <stackTrace>stack</stackTrace>
            </fieldNames>
        </encoder>
        <filter class="org.sonatype.nexus.pax.logging.NexusLogFilter"/>
    </appender>

    <appender name="logfile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${karaf.data}/log/nexus.log</File>
        <Append>true</Append>
        <encoder class="org.sonatype.nexus.pax.logging.NexusLayoutEncoder">
            <pattern>%d{"yyyy-MM-dd HH:mm:ss,SSSZ"} %-5p [%thread] %node %mdc{userId:-*SYSTEM} %c - %m%n</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${karaf.data}/log/nexus-%d{yyyy-MM-dd}.log.gz</fileNamePattern>
            <maxHistory>90</maxHistory>
        </rollingPolicy>
        <filter class="org.sonatype.nexus.pax.logging.NexusLogFilter"/>
    </appender>

    <appender name="clusterlogfile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${karaf.data}/log/nexus_cluster.log</File>
        <Append>true</Append>
        <encoder class="org.sonatype.nexus.pax.logging.NexusLayoutEncoder">
            <pattern>%d{"yyyy-MM-dd HH:mm:ss,SSSZ"} %-5p [%thread] %node %mdc{userId:-*SYSTEM} %c - %m%n</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${karaf.data}/log/nexus_cluster-%d{yyyy-MM-dd}.log.gz</fileNamePattern>
            <maxHistory>90</maxHistory>
        </rollingPolicy>
        <filter class="org.sonatype.nexus.pax.logging.ClusterLogFilter"/>
    </appender>

    <appender name="tasklogfile" class="ch.qos.logback.classic.sift.SiftingAppender">
        <filter class="org.sonatype.nexus.pax.logging.TaskLogsFilter"/>
        <discriminator>
            <key>taskIdAndDate</key>
            <defaultValue>unknown</defaultValue>
        </discriminator>
        <sift>
            <appender name="taskAppender" class="ch.qos.logback.core.FileAppender">
                <file>${karaf.data}/log/tasks/${taskIdAndDate}.log</file>
                <encoder class="org.sonatype.nexus.pax.logging.NexusLayoutEncoder">
                    <pattern>%d{"yyyy-MM-dd HH:mm:ss,SSSZ"} %-5p [%thread] %node %mdc{userId:-*SYSTEM} %c - %m%n
                    </pattern>
                </encoder>
            </appender>
        </sift>
    </appender>

    <appender name="auditlogfile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${karaf.data}/log/audit/audit.log</File>
        <Append>true</Append>
        <encoder>
            <pattern>%msg%n</pattern>
        </encoder>
        <filter class="org.sonatype.nexus.pax.logging.AuditLogFilter"/>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${karaf.data}/log/audit/audit-%d{yyyy-MM-dd}.log.gz</fileNamePattern>
            <maxHistory>90</maxHistory>
        </rollingPolicy>
    </appender>

    <logger name="auditlog" additivity="false">
        <appender-ref ref="auditlogfile"/>
    </logger>

    <appender name="blobstore-reconciliation-log-file" class="ch.qos.logback.classic.sift.SiftingAppender">
        <discriminator>
            <key>blobstore-reconciliation-path</key>
            <defaultValue>unknown</defaultValue>
        </discriminator>
        <sift>
            <appender name="FILE-${blobstore}" class="ch.qos.logback.core.rolling.RollingFileAppender">
                <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                    <Pattern>%d{"yyyy-MM-dd HH:mm:ss"},%msg%n</Pattern>
                </encoder>
                <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                    <fileNamePattern>${blobstore-reconciliation-path}/%d</fileNamePattern>
                    <maxHistory>90</maxHistory>
                </rollingPolicy>
            </appender>
        </sift>
    </appender>
    <logger name="blobstore-reconciliation-log" additivity="false">
        <appender-ref ref="blobstore-reconciliation-log-file"/>
    </logger>

    <appender name="metrics" class="org.sonatype.nexus.pax.logging.InstrumentedAppender"/>

    <logger name="org.eclipse.jetty.webapp" level="INFO"/>
    <logger name="org.eclipse.jetty.webapp.StandardDescriptorProcessor" level="WARN"/>

    <logger name="org.apache.aries" level="WARN"/>
    <logger name="org.apache.felix" level="WARN"/>
    <logger name="org.apache.karaf" level="WARN"/>

    <include file="${karaf.data}/etc/logback/logback-overrides.xml" optional="true"/>
    <include file="${karaf.data}/etc/logback/logback-tasklogfile-appender-override.xml" optional="true"/>

    <root level="${root.level:-INFO}">
        <appender-ref ref="osgi"/>
        <appender-ref ref="console"/>
        <appender-ref ref="logfile"/>
        <appender-ref ref="clusterlogfile"/>
        <appender-ref ref="tasklogfile"/>
        <appender-ref ref="metrics"/>
    </root>
</configuration>
