Логирование

Использование объекта xitrum.Log

Везде вы можете использовать напрямую:

xitrum.Log.debug("My debug msg")
xitrum.Log.info("My info msg")
...

Использование трейта xitrum.Log

Если вам важно сообщать дополнительную информацию о том какой класс генерирует информационные сообщения, используйте наследование он xitrum.Log

package my_package
import xitrum.Log

object MyModel extends Log {
  log.debug("My debug msg")
  log.info("My info msg")
  ...
}

В файле log/xitrum.log вы увидите сообщение MyModel.

Контролеры Xitrum наследуют xitrum.Log и предоставляют метод log. В любом контроллере вы можете писать:

log.debug("Hello World")

Проверка уровня логирования

xitrum.Log основан на SLF4S (API), который в свою очередь на SLF4J.

Обычно, перед выполнением сложных вычислений которые будут отправлены в лог, выполняют проверку уровня логирования что бы избежать не нужных вычислений.

SLF4S автоматически выполняет эти проверки, поэтому нет нужды их выполнять самому.

До Xitrum 3.13+:

if (log.isTraceEnabled) {
  val result = heavyCalculation()
  log.trace("Output: {}", result)
}

Теперь:

log.trace(s"Output: #{heavyCalculation()}")

Настройка уровня и способов логирования

В build.sbt есть строчка:

libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.1.2"

Что означает использовать Logback. Конфигурационный файл Logback - config/logback.xml.

Вы можете заменить Logback любой другой реализацией SLF4J.

Использование Fluentd

Fluentd очень популярная система сбора логов. Вы можете настроить Logback так что бы отправлять логи (возможно из нескольких мест) на Fluentd сервер.

Первое, добавьте библиотеку logback-more-appenders в ваш проект:

libraryDependencies += "org.fluentd" % "fluent-logger" % "0.2.11"

resolvers += "Logback more appenders" at "http://sndyuk.github.com/maven"

libraryDependencies += "com.sndyuk" % "logback-more-appenders" % "1.1.0"

Затем исправьте конфигурацию config/logback.xml:

...

<appender name="FLUENT" class="ch.qos.logback.more.appenders.DataFluentAppender">
  <tag>mytag</tag>
  <label>mylabel</label>
  <remoteHost>localhost</remoteHost>
  <port>24224</port>
  <maxQueueSize>20000</maxQueueSize>  <!-- Позволяет экономить память если сервер выключен -->
</appender>

<root level="DEBUG">
  <appender-ref ref="FLUENT"/>
  <appender-ref ref="OTHER_APPENDER"/>
</root>

...