<configuration>

    <conversionRule conversionWord="clr"
                    class="org.springframework.boot.logging.logback.ColorConverter" />
    <conversionRule conversionWord="wex"
                    class="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />

    <variable name="DAYS_LOG_FILE_ARCHIVED" value="28"/>

    <variable name="LOG_DIRECTORY" value="./logs"/>

    <appender name="APP_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_DIRECTORY}/application.log</file>
        <append>true</append>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_DIRECTORY}/application.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>${DAYS_LOG_FILE_ARCHIVED}</maxHistory>
        </rollingPolicy>

        <encoder>
            <pattern>%d [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>


    <appender name="ERROR_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_DIRECTORY}/error.log</file>
        <append>true</append>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_DIRECTORY}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>${DAYS_LOG_FILE_ARCHIVED}</maxHistory>
        </rollingPolicy>

        <encoder>
            <pattern>%d [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>

        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
    </appender>

    <appender name="ACCESS_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_DIRECTORY}/access.log</file>
        <append>true</append>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_DIRECTORY}/access.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>${DAYS_LOG_FILE_ARCHIVED}</maxHistory>
        </rollingPolicy>

        <encoder>
            <pattern>%msg%n</pattern>
        </encoder>
    </appender>

    <appender name="JSON_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_DIRECTORY}/errorJson.log</file>
        <append>true</append>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_DIRECTORY}/errorJson.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>${DAYS_LOG_FILE_ARCHIVED}</maxHistory>
        </rollingPolicy>

        <encoder>
            <pattern>%msg%n</pattern>
        </encoder>
    </appender>

    <appender name="SECURITY_AUDIT_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_DIRECTORY}/securityAudit.csv</file>
        <append>true</append>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_DIRECTORY}/securityAudit.%d{yyyy-MM-dd}.csv</fileNamePattern>
            <maxHistory>${DAYS_LOG_FILE_ARCHIVED}</maxHistory>
        </rollingPolicy>

        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS},%msg%n</pattern>
        </encoder>
    </appender>

    <logger name="StackTrace" level="INFO" additivity="false">
        <appender-ref ref="ERROR_LOG" />
    </logger>

    <logger name="org.grails.web.errors.GrailsExceptionResolver" level="INFO" additivity="false">
        <appender-ref ref="ERROR_LOG" />
    </logger>

    <logger name="com.valsight" level="INFO" />
    <logger name="grails.app" level="INFO"/>
    <logger name="org.springframework.boot.autoconfigure.security" level="WARN" />
    <!-- required until https://valsight.atlassian.net/browse/ES-10913 is fixed -->
    <logger name="org.hibernate.orm.deprecation" level="ERROR" />

    <logger name="com.valsight.filter.AccessLogFilter" level="INFO" additivity="false">
        <appender-ref ref="ACCESS_LOG" />
    </logger>

    <logger name="com.valsight.interceptor.WebSocketAccessLogger" level="INFO" additivity="false">
        <appender-ref ref="ACCESS_LOG" />
    </logger>

    <logger name="com.valsight.error.json" level="INFO" additivity="false">
        <appender-ref ref="JSON_LOG" />
    </logger>

    <logger name="com.valsight.services.SecurityAuditLogService" level="INFO" additivity="false">
        <appender-ref ref="SECURITY_AUDIT_LOG" />
    </logger>

    <root level="WARN">
        <appender-ref ref="APP_LOG" />
        <appender-ref ref="ERROR_LOG" />
    </root>

    <logger name="org.apache.velocity" level="OFF" />

</configuration>
