Search code examples
clojureprofilingtimbre

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


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.


Solution

  • 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.