Timbre macro 'p' can't be resolved but other Timbre macros can be

179 Views Asked by At

Whenever I try to include a Timbre p statement in a function I get an error:

project.clj

 (defproject sketch "0.1.0-SNAPSHOT"
      :description "FIXME: write description"
      :url "http://example.com/FIXME"
      :license {:name "Eclipse Public License"
                :url "http://www.eclipse.org/legal/epl-v10.html"}
      :dependencies [[org.clojure/clojure "1.5.1"]
                     [com.taoensso/timbre "3.1.1"]])

core.clj

(ns user (:require [taoensso.timbre :as timbre])) 
(timbre/refer-timbre)

(defn tst [a]
  (p :tf (+ a a)))

Output (cider/nrepl)

 Unable to resolve symbol: p in this context, compiling:(NO_SOURCE_PATH:2:3)

But other Timbre functions/macros like profile and spy work fine.

2

There are 2 best solutions below

0
guilespi On BEST ANSWER

The p profiling macro is not exposed with refer-timbre, the documentation seems to be outdated.

(require
   '[taoensso.timbre.profiling :as profiling :refer (pspy pspy* profile defnp)])

As you see here, p is just an alias for pspy

 (defmacro p [id & body] `(pspy ~id ~@body)) ; Alias

So you can use pspy instead.

0
Jp_ On

If you are just interested in the time it took while you are developing the time function can be enough.

(time (some-work))