Что такое хороший способ сделать вход в приложение Scala? Что-то, что согласуется с философией языка, не загромождает код, а также требует минимального обслуживания и ненавязчиво. Вот список основных требований:
- просто
- не загромождает код Scala отлично подходит для своей краткости. Я не хочу, чтобы половина моего кода была записью операторов
- Формат журнала может быть изменен, чтобы соответствовать остальной части моих корпоративных журналов и программного обеспечения для мониторинга
- поддерживает уровни ведения журнала (т.е. отладка, трассировка, ошибка)
- может записывать на диск, а также другие места назначения (например, сокет, консоль и т. д.)
- минимальная конфигурация, если есть
- работает в контейнерах (т. е. веб-сервер)
- (необязательно, но приятно иметь) поставляется как часть языка или как артефакт maven, поэтому мне не нужно взламывать мои сборки, чтобы использовать его
Я знаю, что могу использовать существующие решения для ведения журналов Java, но они терпят неудачу, по крайней мере, в двух из вышеперечисленных, а именно в беспорядке и конфигурации.
Спасибо за ваши ответы.
С Scala 2.10+ Рассмотрим ScalaLogging от Typesafe. Использует макросы для доставки очень чистого API
https://github.com/typesafehub/scala-logging
Цитирую их вики:
После применения макроса код будет преобразован в описанную выше идиому.
Кроме того, ScalaLogging предлагает черту,
Logging
которая удобно предоставляетLogger
экземпляр, инициализированный с именем класса, смешанным в:источник
class MyClass with Logging
."com.typesafe" %% "scalalogging-slf4j" % "1.1.0"
.Использование slf4j и обертки - это хорошо, но использование встроенной интерполяции ломается, когда у вас есть более двух значений для интерполяции, с тех пор вам нужно создать массив значений для интерполяции.
Более похожее на Scala решение заключается в использовании thunk или кластера для задержки объединения сообщений об ошибках. Хорошим примером этого является регистратор лифта
Log.scala Slf4jLog.scala
Который выглядит так:
Обратите внимание, что сообщение msg является вызовом по имени и не будет оцениваться, если isTraceEnabled не имеет значение true, поэтому генерация красивой строки сообщения не требует затрат. Это работает вокруг механизма интерполяции slf4j, который требует анализа сообщения об ошибке. С помощью этой модели вы можете вставить любое количество значений в сообщение об ошибке.
Если у вас есть отдельная черта, которая смешивает этот Log4JLogger с вашим классом, то вы можете сделать
вместо того
источник
Не используйте логулу
На самом деле я последовал рекомендации Евгения, попробовал ее и обнаружил, что она имеет неуклюжую конфигурацию и подвержена ошибкам, которые не исправляются (например, эта ). Он не выглядит в хорошем состоянии и не поддерживает Scala 2.10 .
Используйте slf4s + slf4j-simple
Ключевые преимущества:
-Dorg.slf4j.simplelogger.defaultlog=trace
команды выполнения или жесткого кода в ваш скрипт:System.setProperty("org.slf4j.simplelogger.defaultlog", "trace")
. Нет необходимости управлять мусорными файлами конфигурации!Run/Debug Configurations
и добавьте-Dorg.slf4j.simplelogger.defaultlog=trace
вVM options
.Вот что вам нужно для запуска с Maven:
источник
Вот как я получил Scala Logging работает :
Поместите это в свой
build.sbt
:Затем, после выполнения
sbt update
, это выводит на экран дружественное сообщение журнала:Если вы используете Play, вы можете, конечно, просто
import play.api.Logger
для записи сообщений журнала:Logger.debug("Hi")
.Смотрите документы для получения дополнительной информации.
источник
log4j.properties
внутри папки ресурсов проекта.Я вытащил немного работы из
Logging
чертыscalax
и создал черту, которая также интегрировалаMessageFormat-based
библиотеку.Тогда все выглядит примерно так:
Нам нравится подход до сих пор.
Реализация:
источник
Я использую SLF4J + Logback classic и применяю его так:
Тогда вы можете использовать его в зависимости от вашего стиля:
но этот подход, конечно, использует экземпляр регистратора для каждого экземпляра класса.
источник
Вы должны взглянуть на библиотеку scalax: http://scalax.scalaforge.org/ В этой библиотеке есть черта Logging, использующая sl4j в качестве бэкэнда. Используя эту черту, вы можете легко войти в систему (просто используйте поле logger в классе, наследующем эту черту).
источник
Writer
,Monoid
ИMonad
реализация.источник
Еще не пробовал, но Configgy выглядит многообещающе как для настройки, так и для ведения журнала:
http://github.com/robey/configgy/tree/master
источник
Быстрые и легкие формы.
Scala 2.10 и старше:
И build.sbt:
Scala 2.11+ и новее:
И build.sbt:
источник
После того, как я некоторое время использовал slf4s и logula, я написал
loglady
простую черту входа в систему slf4j.Он предлагает API, похожий на API в библиотеке журналов Python, что делает обычные случаи (базовая строка, простое форматирование) тривиальными и позволяет избежать форматирования шаблонов.
http://github.com/dln/loglady/
источник
Я нахожу очень удобным использование некоторого java-логгера, например, sl4j, с простой оболочкой scala, что дает мне такой синтаксис
На мой взгляд, очень полезное сочетание проверенных java фреймворков и необычного синтаксиса scala.
источник