Приветствую!


Прошлый год выдался крайне продуктивным для нашей некоммерческой организации, и эта статья является лишь началом цикла публикаций, освещающих нашу деятельность. А там есть о чём рассказать, ведь несколько наших продуктов оказались в центре больших банковских проектов — и о да — они не подвели!


Но начнём с чего-то простого и более понятного — и при этом, близкого всем нам без исключения — темы логирования.


Вступление


Год назад мы представили Бобину — революционный SLF4J логгер. В течении этого времени мы:


  • собирали замечания и пожелания (на Хабре, sql.ru и в Slack каналах)
  • внедряли и использовали её в своих проектах (СПО и коммерческое\банковское ПО — в фин-тех гиганте Wirecard)
  • анализировали опыт работы с ней и вырабатывали план доработок
  • рекламировали (на Linkedin)
  • поддерживали пользователей (таких, как Walt Disney Studios)
  • пытались бороться с багами логирования в самом SLF4J (безрезультатно)

Сразу скажу, что Хабр оказался наиболее эффективной площадкой для обсуждения — самые ценные отклики были именно отсюда.


Так каково же наше критическое мнение о собственном проекте в ретроспективе?
Ответ будет следующим: Бобина v2.0.0 была отлична, практически идеальна. Она на 100% выполнила ожидания на интенсивных проектах, сделав настройку и работу с логами удовольствием вместо пытки.


И самое главное — Бобина ни разу не подвела, что позволяет мне с ещё большей смелостью и чистой совестью рекомендовать её для повсеместного использования.


Это послужило нам вдохновением приблизить её ещё на один шаг к идеалу.
А возможным это сделали ваши ценнейшие отклики — большое спасибо!


Итак — встречайте — Бобина 3.0.0!


https://github.com/INFINITE-TECHNOLOGY/BOBBIN
https://bintray.com/infinite-technology/io.i-t/bobbin/_latestVersion


dependencies {
compile "org.codehaus.groovy:groovy-all:2.5.4"
compile "io.i-t:bobbin:3.0.0"
}

Улучшения


Какие же основные улучшения вошли в этот релиз?


YAML конфигурация


YAML конфигурация сменила JSON.
Изначально Бобина имела конфигурационный файл в формате JSON.
Однако JSON имеет ограниченные возможности для блочного форматирования, что приводило к необходимости экранирования скриптовых выражений, например:


"\"./LOGS/PLUGINS/OUTPUT/${className}/${level}/${threadName}_${level}_${date}.log\""

Согласитесь, не очень красиво? На это жаловались и пользователи — и даже предлагали решение — YAML.
При кажущейся очевидности, довольно долго занял процесс исследования этого решения и поиска возможных альтернатив (например, DSL конфигурация). Всё же, остановились на YAML — но только дойдя до "глубин" — изучив Snake YAML парсер, поняв философию использования, найдя баги и ограничения.


Результат порадовал! YAML поддерживает блочное форматирование и чистый синтаксис, отлично подошедший под конфигурацию Бобины. Только посмотрите на новую YAML конфигурацию:


destinations:
- name: io.infinite.bobbin.config.ConsoleDestinationConfig
levels: [warn, error, info]
- name: io.infinite.bobbin.config.FileDestinationConfig
packages: [io.infinite]
fileName: ("./LOGS/INFINITE/${className}/${level}/${className}_${level}_${date}.log")
- name: io.infinite.bobbin.config.FileDestinationConfig
fileName: ("./LOGS/PACKAGES/${className}/${level}/${className}_${level}_${date}.log")
format: dateTime + '|' + level + '|' + threadName + '|' + className + '|' + message + '\n'

Это ли не лучшая существующая конфигурация логгера? Сравните с кашей в Logback, Log4j2.
JSON конфигурация больше не поддерживается в 3.0.0. Документация и Wiki также актуализированы.


Прочие улучшения конфигурации


  • Отдельное указание пакетов с помощью массива packages
  • Фильтр в виде скриптового выражения filter
  • Улучшенная конфигурация по-умолчанию — теперь для большинства случаев даже не требуется ничего настраивать: ошибки пишутся в файл.

Технические улучшения


  • Дальнейшее упрощение кода — теперь Бобина умещается всего в 13 классов.
  • Повышена производительность. Бобина и так была очень быстра, быстрее других логгеров — теперь же она вообще напрочь рвёт тот же logback. Ради эксперимента мы включили в Spring Boot приложении логирование вообще ВСЕХ классов и уровней логирования — с Бобиной не было ощутимой разницы в работе приложения. С logback приложение стартовало около 5 минут в такой конфигурации.
  • Улучшено качество кода. Убран "странноватый" код, сделана более красиво многопоточная синхронизация.

Заключение


На данный момент, вся наша экосистема переведена на Бобину 3.0.0. Мы с нетерпением ждём и постепенного перехода внеших проектов — этому способствует наша уверенность что Бобина будет приносить удовольствие пользователям в работе с ней, и особенно — с последним обновлением, ставшим ещё удобнее.


А тем временем, у нас колоссальные планы на 2020 год:


  • больше проектов
  • больше продуктов
  • больше сервисов

HTTP клиент, чат-боты, мета-программирование, транспиляторы, мейнфреймы, крупнейшие финансовые проекты, SECaaS… Скоро на Хабре.


Stay tuned!