Приветствую!
Прошлый год выдался крайне продуктивным для нашей некоммерческой организации, и эта статья является лишь началом цикла публикаций, освещающих нашу деятельность. А там есть о чём рассказать, ведь несколько наших продуктов оказались в центре больших банковских проектов — и о да — они не подвели!
Но начнём с чего-то простого и более понятного — и при этом, близкого всем нам без исключения — темы логирования.
Вступление
Год назад мы представили Бобину
— революционный 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!