Fork me on GitHub
#duct
<
2022-03-29
>
smnplk03:03:02

Hi guys, new user of Duct here, I am going over the example app on duct github wiki page. Now if I want to disable default logger and use timbre. I can just put this under :duct.profile/base key:

smnplk04:03:39

Ah I see. But I am still having trouble getting the logger reference from integrant.

smnplk05:03:31

(defmethod ig/init-key ::create [_ {:keys [db logger]}]
  (fn [{[_ email password] :ataraxy/result}]
    (let [id (create-user db email password)]
      (println logger)
      (log logger :info ::create {:email email})
      [::response/created (str "/users/" id)])))

smnplk05:03:30

logger has this value: 

smnplk05:03:01

{:enabled? true, :fn #function[taoensso.timbre.appenders.core/spit-appender/self--15048]}

smnplk05:03:10

I was passing the wrong key, :duct.logger/timbre is the correct one

hden05:03:59

You can reference it by :duct/logger. https://github.com/duct-framework/logger.timbre/blob/master/src/duct_hierarchy.edn :duct.logger/timbre implements the :duct/logger interface.

smnplk04:04:12

👍 clear and thanks.

👍 1
smnplk03:03:49

:duct.logger/timbre 
{:level :info
 :appenders {:spit #ig/ref :duct.logger.timbre/spit}}

:duct.logger.timbre/spit {:fname "logs/server.log"}

smnplk03:03:16

And then in the create user handler key i need to reference :duct.logger/timbre

:todo.handler.users/create
  {:db #ig/ref :duct.database/sql
   :logger #ig/ref :duct.logger/timbre}

smnplk03:03:27

And then in the init-key multimethod for my todo.handlers.users/create i can just reference the passed logger like this

smnplk03:03:44

(defmethod ig/init-key ::create [_ {:keys [db logger]}]
  (fn [{[_ email password] :ataraxy/result}]
    (let [id (create-user db email password)]
      (log logger :info ::create {:email email})
      [::response/created (str "/users/" id)])))

smnplk03:03:46

Then I can just remove the :duct.module/logging key from the config. Am I doing this right? It does work.