lager в нескольких приложениях проекта

101 views
Skip to first unread message

Константин Константинов

unread,
Apr 1, 2015, 4:24:38 PM4/1/15
to erlang-...@googlegroups.com
Доброго дня.

Начинаю осваивать Erlang, возник вопрос.

Есть приложение (А). Журналирование настроено через lager, всё работает.
Добавил в проект сервер (Б). Чтоб код в одну кучу не мешать, вынес его в apps/ в отдельное приложение.
Основное приложение А загружает дополнительный сервер Б, всё работает как следует.

Сложность возникла, когда я захотел в этот сервер Б добавить lager. Чтоб логгирование делать в тот же лог и с теми же настройками, что и в приложении А.
Но в итоге логи из Б просто не пишутся. Без всяких ошибок.

Подробности:
  • Собираю всё через rebar.
  • В обоих конфигах (А и Б) задано {parse_transform, lager_transform}.
  • Настройки лагера в myapp.config в основном приложении А.
  • Лагер запускаю в А через lager:start(), уже после этого запускаю сервер Б.
  • Весь проект пересобирал, всё внутри ebin/ для верности удалял руками.
  • Логи сервера Б не пишутся ни в консоль, ни в файлы.

Как сделать, чтоб логи писались?

Заглянул в исходники flussonic — там похоже lager стартует единожды, но в соседних «приложениях» (из apps/) используется. Хочу так же. Но почему там работает, а у меня нет — не понял.

mprize

unread,
Apr 2, 2015, 3:11:17 AM4/2/15
to erlang-...@googlegroups.com
может уровни логгирования разные? В первом приложении error, а во втором info, к примеру. И лагер настроен только на error

Grey Kristy

unread,
Apr 2, 2015, 5:25:37 AM4/2/15
to erlang-...@googlegroups.com
1. Скорее всего приложение Б не видит конфигов лагера. Как вы задаете конфиг для всего проекта?
2. Руками лучше ничего не запускать. Просто поставьте все нужные приложения, включая лагер, в зависимости в  *.app.src, а потом application:ensure_all_started(main_application)

Константин Константинов

unread,
Apr 2, 2015, 8:59:44 AM4/2/15
to erlang-...@googlegroups.com

1. Конфиг лагера в файле myapp.config приложения А. То есть А запускаю с параметром -config myapp. Чего-то думал, что оно в секции env. Перенёс туда, стало работать иначе — теперь в консоли не выводится имя файла, pid и другое лишнее.
То есть конфиг был такой:
[
 
{myapp, [...settings...]},
 
{lager, [...settings...]}
].


Попробовал такой:
[
 
{myapp, [
   
...settings...,
   
{lager, [...settings...]}
 
]}
].


Заработало иначе. Но в приложении Б логи не появились.

Попробовал в консоли на запущенном приложении продублировать настройки:
application:set_env(appB, lager, application:get_env(myapp,lager)).
Продублировались в приложение Б, но не помогло — логов из него не появилось.

Видимо что-то сильно неправильно делаю, ещё в erlang и приложения не въехал.

Сейчас попробую не в конфиге, а прямо в рантайме настраивать lager. Как в коде flussonic. Просто других примеров не знаю, где lager работает в нескольких приложениях.
Если кто знает — поделитесь. Минимально работающий пример будет очень в тему.

2. Спасибо. Я в старте приложений плаваю ещё. В итоге собственный (точнее скопированный) ensure_started прилепил. С автостартом зависимостей приложения, если они ещё не запущены. Попробую application:ensure_all_started.

Был ещё у меня старт ген-серверов с нужными настройками, чего-то решил, что это старт приложений, добавил лагер сначала туда.

четверг, 2 апреля 2015 г., 12:25:37 UTC+3 пользователь Grey Kristy написал:

Константин Константинов

unread,
Apr 2, 2015, 9:02:45 AM4/2/15
to erlang-...@googlegroups.com
Да цель как раз в том, чтоб общие настройки лагера были в обоих приложениях, но при этом не дублировались в конфигах. То есть конфиг лагера один, а работает со всеми приложениями.


четверг, 2 апреля 2015 г., 10:11:17 UTC+3 пользователь mprize написал:

Константин Константинов

unread,
Apr 2, 2015, 9:19:12 AM4/2/15
to erlang-...@googlegroups.com
Отбой. Всё заработало.
mprize, Grey Kristy, спасибо за помощь!

Правильный конфиг:
[
  
{myapp, [...settings...]},
  
{lager, [...settings...]}
].

Оказалось, старые бинарники всё-таки не дочистились. А собраны они были видимо без parse_transform лагера.
Reply all
Reply to author
Forward
0 new messages