Fork me on GitHub
#clojure-russia
<
2016-02-20
>
serce09:02:53

Привет! Кто-нибудь работал с nrepl напрямую? Стартую (start-server :port 16874) из Java приложения, хочется, чтобы при подключении к nprepl автоматически в repl-сессию загружался нужный файл. API для этого не могу найти

serce10:02:01

Если вдруг кому понадобится решение, https://gist.github.com/SerCeMan/905ee46db26ee38e7201

artemyarulin10:02:03

@serce: А это для чего нужно?

serce10:02:20

Есть у меня чисто java-приложение, я в нем хочу поднимать в dev-моде nrepl, lein/boot за собой тянуть не могу. При этому хочется, чтобы при открытии nrepl сессии я сразу оказывался в нужном ns, где объявлены все мои утильные функции

prepor11:02:15

nrepl в новой кложе запускается как агент, во-первых

prepor11:02:39

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

prepor11:02:51

в этом неймспейсе уже указать все что нужно

niquola12:02:29

Кто чем логи пишет - logback, log4j ???

prepor12:02:25

@serce: во-первых я нагнал, во-вторых, я теоретизирую, так как сам этого не делал. но смотри. (речь идет о 1.8 кложе) - http://clojure.org/reference/repl_and_main#_launching_a_socket_server как запускать жвм с репл-сервером. там в примере :accept clojure.core.server/repl смотрим на эту функу https://github.com/clojure/clojure/blob/2932d562e3a809f88130e5434c32aa18e34a67eb/src/clj/clojure/core/server.clj#L177 смотрим на init https://github.com/clojure/clojure/blob/2932d562e3a809f88130e5434c32aa18e34a67eb/src/clj/clojure/core/server.clj#L160 итого: нужно определить свою repl-функцию типа:

(defn repl
  "REPL with predefined hooks for attachable socket server."
  []
  (m/repl
    :init my-repl-init
    :read repl-read))
где my-repl-init будет делать все что нужно. и скормить ее как accept-параметр для сокет-сервера

serce12:02:03

хм, да, можно будет перейти на 1.8 и попробовать упростить

serioga12:02:55

@nicola я на скале привык к logback на clojure с clojure.tools.logging тоже вроде норм. https://clojurians.slack.com/archives/clojure-russia/p1455969749001106

prepor13:02:08

@nicola: clojure.tools.logging + slf4j + logback

prepor13:02:59

@serioga: clojure.tools.logging вообще никак не отменяет logback

serioga13:02:37

не отменяет. Я имел ввиду, что logback и пользую

serioga13:02:10

вот как без него logback прикручивать — не разбирался

serioga13:02:25

а так само магическим образом работает simple_smile

prepor13:02:37

logback это бэкенд для slf4j, clojure.tools.logging фронтенд к slf4j (в том числе)

prepor13:02:52

никто не мешает напрямую вызывать slf4j-api

prepor13:02:57

но зачем )

niquola13:02:34

thx, уже вставляю logback

prepor13:02:16

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

niquola13:02:21

@prepor: а ты сколько логгеров на приложение создаешь?

prepor13:02:23

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

niquola13:02:40

пападробнее

prepor13:02:46

есть рут-логер, от которого отходят все остальные

niquola13:02:57

(LoggerFactory/getLogger "aidbox"))

niquola13:02:13

(LoggerFactory/getLogger "aidbox.child"))

prepor13:02:16

ты программно его настраиваешь что ли? )

niquola13:02:42

нет настройки я так понимаю в logback.xml

niquola13:02:57

или ты про какую настройку

prepor13:02:58

<root level="info"> <appender-ref ref="STDOUT" /> <appender-ref ref="angryman" /> </root>

prepor13:02:02

рут-логер

prepor13:02:24

дальше настраиваешь то, что тебя интересует конкретно по неймспейсам

prepor13:02:24

<logger name="org.apache.zookeeper" level="ERROR"/>

niquola13:02:30

я хочу отдельно управлять например db логами - как это правильно сделать

niquola13:02:49

но в приложении я должен для db сделать (LoggerFactory/getLogger "aidbox.db"))

prepor13:02:54

все логеры с неймспейсом org.apache.zookeeper будут принимать прежде всего эти настройки, потом уже рутовые

prepor13:02:00

ничего не должен

niquola13:02:20

ты какой-то оберткой пользуешься?

fxposter13:02:40

так clojure.tools.logging же

prepor13:02:46

за тебя все сделает clojure.tools.logging

prepor13:02:08

оно логером просто ставит текущий неймспейс

niquola13:02:11

Ага понял - я его как-то пропустил simple_smile

prepor13:02:15

ява-либы делают примерно так же

prepor13:02:57

просто фигачишь log/info log/debug в коде короче

prepor13:02:06

потом при запуске уже настраиваешь это как тебе надо

niquola13:02:14

спасибо понял - а то начал сам оборачивать

prepor13:02:40

что с каким уровнем срать, куда слать эксепшены, можешь даже фильтры настраивать

prepor13:02:54

это все конечно тупо и эксемелем делается, но уж как есть )

rm18:02:39

https://github.com/ptaoussanis/timbre без xml справляется

rm18:02:19

но адаптеры к джавовским приблудовинам придется писать самостоятельно (хотя какие-то уже написали)

prepor22:02:37

@rm timbre как был детским садом так им и остался

prepor22:02:40

в xml нет ничего особо плохого. это конфигурирование данными. а сам формат уж всяко лучше того же json