<?xml version="1.0" encoding="UTF-8"?>

<configuration>

  <!-- Be sure to flush latest logs on exit -->
  <shutdownHook class="org.tron.core.config.TronLogShutdownHook"/>

  <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} %-5level [%t] [%c{1}]\(%F:%L\) %m%n</pattern>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
      <level>INFO</level>
    </filter>
  </appender>

  <appender class="ch.qos.logback.core.rolling.RollingFileAppender"
    name="FILE">
    <file>./logs/tron.log</file>
    <rollingPolicy
      class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
      <!-- rollover daily -->
      <fileNamePattern>./logs/tron-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
      <!-- each file should be at most 500MB, keep 30 days worth of history, but at most 50GB -->
      <maxFileSize>500MB</maxFileSize>
      <maxHistory>7</maxHistory>
      <totalSizeCap>50GB</totalSizeCap>
    </rollingPolicy>
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} %-5level [%t] [%c{1}]\(%F:%L\) %m%n</pattern>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
      <level>TRACE</level>
    </filter>
  </appender>

  <appender class="ch.qos.logback.classic.AsyncAppender" name="ASYNC">
    <!-- Don't discard INFO, DEBUG, TRACE events in case of queue is 80% full -->
    <discardingThreshold>0</discardingThreshold>
    <!-- Default is 256 -->
    <!-- Logger will block incoming events (log calls) until queue will free some space -->
    <!-- (the smaller value -> flush occurs often) -->
    <queueSize>100</queueSize>
    <includeCallerData>true</includeCallerData>
    <appender-ref ref="FILE"/>
  </appender>

  <root level="INFO">
    <!--<appender-ref ref="CONSOLE"/>-->
    <appender-ref ref="ASYNC"/>
  </root>


  <appender name="METRICS" class="org.tron.common.prometheus.InstrumentedAppender" />

  <root level="INFO">
    <appender-ref ref="METRICS" />
  </root>

  <logger level="INFO" name="app"/>
  <logger level="INFO" name="net"/>
  <logger level="INFO" name="backup"/>
  <logger level="INFO" name="discover"/>
  <logger level="INFO" name="crypto"/>
  <logger level="INFO" name="utils"/>
  <logger level="INFO" name="actuator"/>
  <logger level="INFO" name="API"/>
  <logger level="INFO" name="witness"/>
  <logger level="INFO" name="DB"/>
  <logger level="INFO" name="capsule"/>
  <logger level="INFO" name="VM"/>

  <logger level="INFO" name="tool" additivity="false">
    <appender-ref ref="CONSOLE"/>
  </logger>

</configuration>

