clojure-russia

Работа и релокейт: #jobs-rus | #clojure-russia-offtop Телеграм-чат https://t.me/clojure_ru
anjensan 2017-09-26T09:24:05.000229Z

не надо ничего исключать

anjensan 2017-09-26T09:25:06.000333Z

в джаве есть несколько API для логирования. разные либы юзают разные АПИ. это плохая новость

anjensan 2017-09-26T09:25:30.000379Z

хорошая - все их можно свести заглушками к log4j или logback. соотв тебе нужно его поставить и сконфигурить

anjensan 2017-09-26T09:25:35.000043Z

https://logback.qos.ch/

anjensan 2017-09-26T09:26:20.000235Z

SLF4J из твоего сообщения - это название одного из таких API (т.е. это либа, но сама не логирует, а только стучится в logback или log4j или еще куда

anjensan 2017-09-26T09:30:09.000343Z

@ivana https://logback.qos.ch/documentation.html короче тебе нужно в classpath положить файлик logback.xml (погугли формат)

anjensan 2017-09-26T09:31:04.000231Z

>> PS какая хреновая это зараза - библиотеки логинга! не могу сдержаться, но "какая это хреновая зараза - говнокодеры" =(

anjensan 2017-09-26T09:37:11.000379Z

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

anjensan 2017-09-26T09:38:15.000357Z

правильно - добавить что-то вроде такого https://github.com/ngriso/permisdevote/blob/master/src/test/resources/logback.xml (если логгинг вообще не нужен)

2017-09-26T10:19:36.000160Z

Спасибо. Разумеется, пока не не научишься защищаться от лог-спама, со следующей добавленной либой может произойти та же история. Но я, простите, не ожидал, что подключая либу, мне надо будет разбираться во многих моментах, напрямую с ее функционалом не связанных, но мешающих нормально ей пользоваться.

anjensan 2017-09-26T10:31:30.000261Z

тебе надо благодарить разработчиков этой либы, что они много логируют

anjensan 2017-09-26T10:32:11.000210Z

обрезать лишнее - не проблема (дело всего 1 строчки в logback.xml), а вот добавить логирование когда оно понадобится ну так, самую чуточку, посложнее будет

2017-09-26T10:35:33.000150Z

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

anjensan 2017-09-26T10:42:18.000126Z

а как ты добавишь логирование в чужую библиотеку?

anjensan 2017-09-26T10:45:26.000369Z

тем более, что реч, как я понял, про логи из org.eclipse.jetty, что по сути полноценный веб-сервер... веб-сервер без логов это странно

2017-09-26T10:45:43.000200Z

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

anjensan 2017-09-26T10:55:19.000024Z

ну если библиотека из 100 строчек и умеет находить факториал и фиббоначи - тогда да

anjensan 2017-09-26T10:56:49.000399Z

а если это гребаный https://github.com/eclipse/jetty.project - тогда врядли

2017-09-26T11:02:07.000199Z

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

anjensan 2017-09-26T11:06:34.000003Z

подожди. так никто не заменял никакой "лог-интерфейс"

anjensan 2017-09-26T11:07:44.000136Z

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

anjensan 2017-09-26T11:08:05.000319Z

просто запускать нажно как my-program >> my-program.log

anjensan 2017-09-26T11:12:04.000370Z

и это даже явно сказано в документации 🙂

anjensan 2017-09-26T11:16:54.000229Z

хотя я полностью соглашусь, что по дефолту стоило бы писать только >= INFO, но не DEBUG

dottedmag 2017-09-26T12:22:15.000052Z

Сложно быть библиотекой в 2017 году. Нужно и логи писать, и метрики отсылать, и уметь останавливаться, если не успеваешь в таймслот работу выполнить. Ещё сложнее, если интерфейсы для всего этого не в стандартной библиотеке языка.

kuzmin_m 2017-09-26T13:03:38.000615Z

привет вопрос по докеру, может быть кто-то сталкивался докер используется для разработки на clojure с хоста в контейнер монтируется директория с кодом внутри контейнера jvm в контейнере запускается repl server порт пробрасывается на localhost на хосте запускается emacs cider и коннектится к repl и это работает, но есть проблемы на хосте папка с проектом это /User/kuzmin/projects/......../project в контейнере /usr/src/app иногда редактору сносит крышу и он не правильно обрабатывает ошибки, не правильно прыгает по файлам, т.к. пути разные особенно это заметно при работе с cljs плюс там maven и репозиторий хранится только в контейнере в /root/.m2 соответственно хост его не видит, и если открыть документацию в emacs, там ссылка на какую-нибудь jar из репозитория, и емакс ее не может открыть, т.к. на хосте нет такого файла при использовании emacs tramp все ок, но не все с ним работает как нужно и нужно git тащить в контейнер можно еще попробовать сделать одинаковые пути на хосте и в контейнере можно запустиь emacs в docker можно посмотреть в сторону nrepl middleware и как-то подменять пути (ИМХО правильный путь, но ничего готового я не нашел) сталкивались с подобным? может быть с другими языками?

2017-09-26T13:22:36.000276Z

я сталкивался, решилось использованием кастомной настройки в project.clj - :local-repo "/tmp/local-m2/foo" + маунтом вольюма - -v /tmp/local-m2/foo:/tmp/local-m2/foo

2017-09-26T13:23:01.000636Z

вся соль в использовании одинаковых путей на хостовой машине и в контейнере

2017-09-26T13:24:43.000637Z

более чистый путь - завести в контейнере пользователя, типа box с домашней директорией /home/box и на хосте создать линк ln -s $HOME/.m2 /home/box/.m2

2017-09-26T13:25:19.000632Z

в этом случае не нужно будет кастомизировать локальный репозиторий

2017-09-26T13:26:11.000017Z

естественно процес в контейнере стоит запускать под этим самым пользователем

kuzmin_m 2017-09-26T13:33:20.000678Z

там еще беда с cljs, я уже точно не помню в чем причина, пришлось в Dockerfile добавлять:

RUN mkdir -p /Users/m_kuzmin/projects/github \
    && ln -s /usr/src/app /Users/m_kuzmin/projects/github/form

kuzmin_m 2017-09-26T13:34:32.000329Z

можно еще не делать пользователей, а хранить проекты в /projects/.... на хосте и на клиенте, а репозиторий хранить в той же директории, что и проект, настроив через :local-repo

kuzmin_m 2017-09-26T13:34:50.000584Z

но все это как то стремно выглядит

2017-09-26T13:35:20.000277Z

на маке не так то просто добавить директорию типа /projects )

2017-09-26T13:35:39.000689Z

по крайней мере с последними версиями мак оси

kuzmin_m 2017-09-26T13:36:22.000017Z

/ $ mkdir /foo
mkdir: /foo: Permission denied
/ $ sudo mkdir /foo
Password:

kuzmin_m 2017-09-26T13:36:25.000207Z

создала

kuzmin_m 2017-09-26T13:36:38.000145Z

sierra

kuzmin_m 2017-09-26T13:36:44.000372Z

это вроде предпоследняя

2017-09-26T13:38:04.000435Z

а, это я как раз со своим случаем попутал, в /home/ создать ничего не получится ьез отключения какого-то спеыиального нового мода

kuzmin_m 2017-09-26T13:38:57.000652Z

может еще какой-то вариант есть? я вчера вечером пару часов искал, но как-то безрезультатно

2017-09-26T13:39:17.000159Z

других не ведаю(

kuzmin_m 2017-09-26T13:39:21.000374Z

=(

2017-09-26T13:40:11.000434Z

есть вариант с динамической модификацией class-path через middleware, но там черт ногу сломит, у меня терпения разобраться не хватило

kuzmin_m 2017-09-26T13:43:12.000466Z

может как-то на tramp перейти? но тогда надо в контейнер тащить git, что бы с ним работали projectile и magit и projectile понимает, что я зашел в проект, но в закладки его не добавляет а для tramp есть docker-tramp или как-то так

kuzmin_m 2017-09-26T13:44:14.000340Z

но если это tramp, то зачем на хосте исходники держать? и тогда вообще весь workflow меняется