<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE logback:configuration [
  <!ENTITY APP_NAME          "vertx">
  <!ENTITY LOG_DIR           "/USR/newtprod/vertx/logs">
  <!ENTITY DEFAULT_ROTATION           "30">
  <!ENTITY APPLICATION_ROTATION           "30">
  <!ENTITY STACKTRACE_ROTATION           "30">
  <!ENTITY DATE_PATTERN      "yyyy-MM-dd">
]>
<configuration scan="true" scanPeriod="30 seconds">

  <shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook" />
  <statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />

  <property name="normalPattern"
            value="%d{dd/MM/yyyy-HH:mm:ss.SSS} [%thread][%X{wsId}] %-5level %logger{36}:%L - %msg%n"/>

  <property name="exceptionOnlyPattern" value="%xException{full}" />

  <!-- DEFAULT LOG FILE -->
  <appender name="defaultFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>&LOG_DIR;/default.log</file>
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
      <level>WARN</level>
    </filter>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- rollover daily -->
      <fileNamePattern>
        &LOG_DIR;/&APP_NAME;/backup/%d{&DATE_PATTERN;,aux}/default-%d{&DATE_PATTERN;}.%i.log.gz
      </fileNamePattern>
      <maxHistory>&DEFAULT_ROTATION;</maxHistory>
      <timeBasedFileNamingAndTriggeringPolicy
        class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <!-- or whenever the file size reaches 100MB -->
        <maxFileSize>100MB</maxFileSize>
      </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
    <encoder>
      <charset>UTF-8</charset>
      <pattern>${normalPattern}</pattern>
    </encoder>
  </appender>

  <!-- APPLICATION LOG FILE -->
  <appender name="applicationFileAppender"
            class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>&LOG_DIR;/&APP_NAME;.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- rollover daily -->
      <fileNamePattern>
          &LOG_DIR;/backup/%d{&DATE_PATTERN;,aux}/&APP_NAME;-%d{&DATE_PATTERN;}.%i.log.gz
      </fileNamePattern>
      <maxHistory>&APPLICATION_ROTATION;</maxHistory>
      <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <!-- or whenever the file size reaches 100MB -->
        <maxFileSize>100MB</maxFileSize>
      </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
    <encoder>
      <charset>UTF-8</charset>
      <pattern>${normalPattern}</pattern>
    </encoder>
  </appender>

  <!-- STACKTRACE LOG FILE -->
  <appender name="stackTracerFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>&LOG_DIR;/stacktraces.log</file>
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
      <level>ERROR</level>
    </filter>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- rollover daily -->
      <fileNamePattern>
        &LOG_DIR;/backup/%d{&DATE_PATTERN;,aux}/stacktraces-%d{&DATE_PATTERN;}.%i.log.gz
      </fileNamePattern>
      <maxHistory>&STACKTRACE_ROTATION;</maxHistory>
      <timeBasedFileNamingAndTriggeringPolicy
        class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <!-- or whenever the file size reaches 100MB -->
        <maxFileSize>100MB</maxFileSize>
      </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
    <encoder>
      <charset>UTF-8</charset>
      <pattern>${exceptionOnlyPattern}</pattern>
    </encoder>
  </appender>

  <logger name="com.docapost" level="DEBUG" additivity="false">
    <appender-ref ref="applicationFileAppender" />
    <appender-ref ref="stackTracerFileAppender" />
  </logger>

  <root level="ALL">
    <appender-ref ref="defaultFileAppender" />
  </root>
</configuration>
