   most deeply nested label. The exception thrown is formatted and logged as well.  The actual exception will be rethrown, wrapped in a
   new `ex-info` exception, with key `:operation-trace` set to the vector of operation trace strings.
 
-  label may be a string, an object, or a function that returns a string; execution of the function is deferred until needed."
+  label may be a string, an object, or a function that returns a string; execution of the function is deferred until
+  an operation trace label is needed.
+
+  The operation trace is stored in a dynamic var; if you make use of Clojure's bound-fn macro to execute code in a new thread
+  with the same bindings, then operations in a new thread will log as successors to operations in the current thread.
+
+  Note that the clojure.core.async thead and go macros *do* propogate bindings to new threads."
   [label & body]
   `(track* (get-logger ~*ns*) ~label #(do ~@body)))
 

(defn- error [logger message]
  (l/log* logger :error nil message))

(defn- log-trace-label-stack [logger trace-labels message e]
  (error logger "An exception has occurred:")
  (doseq [[trace-message i] (map vector trace-labels (iterate inc 1))]
    (error logger (format "[%3d] - %s" i trace-message)))
  (error logger (format "%s%n%s" message (exception/format-exception e))))

(defn track*
  "Tracks the execution of a function of no arguments. The trace macro converts into a call to track*.

  f
  : function to invoke. track* returns the result from this function."
  [logger label f]
  (binding [*operation-traces* (conj *operation-traces* label)]
    (set-should-log-operations! true)
    (try
      (when *log-trace-level*
        (l/log* logger *log-trace-level* nil (label-to-string label)))
      (f)
      (catch Throwable e
        (if (should-log-operations?)
          (let [trace-label-strings (mapv label-to-string *operation-traces*)
                message (or (.getMessage e) (-> e .getClass .getName))]
            (log-trace-label-stack logger trace-label-strings e)
            (set-should-log-operations! false)
            (throw (ex-info message
                            {:operation-trace trace-label-strings}
                            e)))
          (throw e))))))

(defn get-logger
  "Determines the logger instance for a namespace (by leveraging some clojure.tools.logging internals)."
