mirror of https://github.com/status-im/timbre.git
Merge branch 'dev'
This commit is contained in:
commit
e86e5c470c
30
README.md
30
README.md
|
@ -277,7 +277,7 @@ A simple **sampling profiler** is also available: `taoensso.timbre.profiling/sam
|
|||
|
||||
## Contact & contributing
|
||||
|
||||
`lein start-dev` to get a (headless) development repl that you can connect to with [Cider][] (emacs) or your IDE.
|
||||
`lein start-dev` to get a (headless) development repl that you can connect to with [Cider][] (Emacs) or your IDE.
|
||||
|
||||
Please use the project's GitHub [issues page][] for project questions/comments/suggestions/whatever **(pull requests welcome!)**. Am very open to ideas if you have any!
|
||||
|
||||
|
@ -288,18 +288,16 @@ Otherwise reach me (Peter Taoussanis) at [taoensso.com][] or on [Twitter][]. Che
|
|||
Copyright © 2012-2014 Peter Taoussanis. Distributed under the [Eclipse Public License][], the same as Clojure.
|
||||
|
||||
|
||||
[API docs]: <http://ptaoussanis.github.io/timbre/>
|
||||
[CHANGELOG_]: <https://github.com/ptaoussanis/timbre/blob/master/CHANGELOG.md>
|
||||
[CHANGELOG]: <https://github.com/ptaoussanis/timbre/releases>
|
||||
[other Clojure libs]: <https://www.taoensso.com/clojure-libraries>
|
||||
[Twitter]: <https://twitter.com/ptaoussanis>
|
||||
[SemVer]: <http://semver.org/>
|
||||
[Break Version]: <https://github.com/ptaoussanis/encore/blob/master/BREAK-VERSIONING.md>
|
||||
[Leiningen]: <http://leiningen.org/>
|
||||
[CDS]: <http://clojure-doc.org/>
|
||||
[ClojureWerkz]: <http://clojurewerkz.org/>
|
||||
[issues page]: <https://github.com/ptaoussanis/timbre/issues>
|
||||
[Cider]: <https://github.com/clojure-emacs/cider>
|
||||
[commit history]: <https://github.com/ptaoussanis/timbre/commits/master>
|
||||
[taoensso.com]: <https://www.taoensso.com>
|
||||
[Eclipse Public License]: <https://raw2.github.com/ptaoussanis/timbre/master/LICENSE>
|
||||
[API docs]: http://ptaoussanis.github.io/timbre/
|
||||
[CHANGELOG]: https://github.com/ptaoussanis/timbre/releases
|
||||
[other Clojure libs]: https://www.taoensso.com/clojure
|
||||
[taoensso.com]: https://www.taoensso.com
|
||||
[Twitter]: https://twitter.com/ptaoussanis
|
||||
[issues page]: https://github.com/ptaoussanis/timbre/issues
|
||||
[commit history]: https://github.com/ptaoussanis/timbre/commits/master
|
||||
[Break Version]: https://github.com/ptaoussanis/encore/blob/master/BREAK-VERSIONING.md
|
||||
[Leiningen]: http://leiningen.org/
|
||||
[Cider]: https://github.com/clojure-emacs/cider
|
||||
[CDS]: http://clojure-doc.org/
|
||||
[ClojureWerkz]: http://clojurewerkz.org/
|
||||
[Eclipse Public License]: https://raw2.github.com/ptaoussanis/timbre/master/LICENSE
|
14
project.clj
14
project.clj
|
@ -12,21 +12,21 @@
|
|||
|
||||
:dependencies
|
||||
[[org.clojure/clojure "1.4.0"]
|
||||
[com.taoensso/encore "1.21.0"]
|
||||
[io.aviso/pretty "0.1.16"]]
|
||||
[com.taoensso/encore "1.24.1"]
|
||||
[io.aviso/pretty "0.1.17"]]
|
||||
|
||||
:profiles
|
||||
{;; :default [:base :system :user :provided :dev]
|
||||
:server-jvm {:jvm-opts ^:replace ["-server"]}
|
||||
:1.5 {:dependencies [[org.clojure/clojure "1.5.1"]]}
|
||||
:1.6 {:dependencies [[org.clojure/clojure "1.6.0"]]}
|
||||
:test {:dependencies [[expectations "2.0.13"]
|
||||
:test {:dependencies [[expectations "2.1.0"]
|
||||
[org.clojure/test.check "0.7.0"]
|
||||
[org.clojure/tools.logging "0.3.1"]
|
||||
|
||||
;; Appender dependencies
|
||||
[com.taoensso/nippy "2.7.1"]
|
||||
[com.taoensso/carmine "2.9.0"]
|
||||
[com.taoensso/nippy "2.8.0"]
|
||||
[com.taoensso/carmine "2.9.2"]
|
||||
[com.draines/postal "1.11.3"]
|
||||
[irclj "0.5.0-alpha4"]]
|
||||
:plugins [[lein-expectations "0.0.8"]
|
||||
|
@ -34,8 +34,8 @@
|
|||
:dev
|
||||
[:1.6 :test
|
||||
{:dependencies []
|
||||
:plugins [[lein-ancient "0.5.4"]
|
||||
[codox "0.8.10"]]}]}
|
||||
:plugins [[lein-ancient "0.6.4"]
|
||||
[codox "0.8.11"]]}]}
|
||||
|
||||
:test-paths ["test" "src"]
|
||||
|
||||
|
|
|
@ -4,7 +4,8 @@
|
|||
[io.aviso.exception :as aviso-ex]
|
||||
[taoensso.encore :as enc])
|
||||
(:import [java.util Date Locale]
|
||||
[java.text SimpleDateFormat]))
|
||||
[java.text SimpleDateFormat]
|
||||
[java.io File]))
|
||||
|
||||
;;;; Encore version check
|
||||
|
||||
|
@ -96,6 +97,27 @@
|
|||
(:current-level config)
|
||||
@level-atom))))
|
||||
|
||||
;;;;
|
||||
|
||||
(def ^:private get-hostname
|
||||
(enc/memoize* 60000
|
||||
(fn []
|
||||
(->
|
||||
(future ; Android doesn't like this on the main thread
|
||||
(try (.. java.net.InetAddress getLocalHost getHostName)
|
||||
(catch java.net.UnknownHostException _
|
||||
"UnknownHost")))
|
||||
(deref 5000 "UnknownHost")))))
|
||||
|
||||
(def ^:private ensure-spit-dir-exists!
|
||||
(enc/memoize* 60000
|
||||
(fn [fname]
|
||||
(when-not (str/blank? fname)
|
||||
(let [file (File. ^String fname)
|
||||
dir (.getParentFile (.getCanonicalFile file))]
|
||||
(when-not (.exists dir)
|
||||
(.mkdirs dir)))))))
|
||||
|
||||
;;;; Default configuration and appenders
|
||||
|
||||
(defn default-fmt-output-fn
|
||||
|
@ -186,7 +208,8 @@
|
|||
:min-level nil :enabled? false :async? false :rate-limit nil
|
||||
:fn (fn [{:keys [ap-config output]}] ; Can use any appender args
|
||||
(when-let [filename (:spit-filename ap-config)]
|
||||
(try (spit filename (str output "\n") :append true)
|
||||
(try (ensure-spit-dir-exists! filename)
|
||||
(spit filename (str output "\n") :append true)
|
||||
(catch java.io.IOException _))))}}})
|
||||
|
||||
(enc/defonce* config (atom example-config))
|
||||
|
@ -259,16 +282,6 @@
|
|||
(fn [apfn-args] ; Runtime:
|
||||
(send-off agent (fn [_] (apfn apfn-args)))))))))))
|
||||
|
||||
(def ^:private get-hostname
|
||||
(enc/memoize* 60000
|
||||
(fn []
|
||||
(->
|
||||
(future ; Android doesn't like this on the main thread
|
||||
(try (.. java.net.InetAddress getLocalHost getHostName)
|
||||
(catch java.net.UnknownHostException _
|
||||
"UnknownHost")))
|
||||
(deref 5000 "UnknownHost")))))
|
||||
|
||||
(defn- wrap-appender-juxt
|
||||
"Wraps compile-time appender juxt with additional runtime capabilities
|
||||
(incl. middleware) controlled by compile-time config. Like `wrap-appender-fn`
|
||||
|
|
|
@ -2,32 +2,40 @@
|
|||
"Android LogCat appender. Depends on the android runtime. This is a
|
||||
configuration for the timbre logging library"
|
||||
{:author "Adam Clements"}
|
||||
(:require [taoensso.timbre :as timbre]))
|
||||
(:require [taoensso.timbre :as timbre]
|
||||
clojure.string))
|
||||
|
||||
(def logcat-appender
|
||||
{:doc (str "Appends to Android logcat. Obviously only works if "
|
||||
"running within the Android runtime (device or emulator)."
|
||||
"You may want to disable std-out to prevent printing nested "
|
||||
"timestamps, etc.")
|
||||
:min-level :debug
|
||||
:enabled? true
|
||||
:prefix-fn :ns
|
||||
:fn (fn [{:keys [level prefix throwable message]}]
|
||||
(defn make-logcat-appender
|
||||
"Returns an appender that writes to Android LogCat. Obviously only works if
|
||||
running within the Android runtime (device or emulator). You may want to
|
||||
disable std-out to prevent printing nested timestamps, etc."
|
||||
[& [appender-opts make-opts]]
|
||||
(let [default-appender-opts {:enabled? true
|
||||
:min-level :debug}]
|
||||
(merge default-appender-opts appender-opts
|
||||
{:fn (fn [{:keys [level ns throwable message]}]
|
||||
(let [output (format "%s %s - %s" timestamp
|
||||
(-> level name clojure.string/upper-case)
|
||||
(or message ""))]
|
||||
(if throwable
|
||||
(case level
|
||||
:trace (android.util.Log/d prefix message throwable)
|
||||
:debug (android.util.Log/d prefix message throwable)
|
||||
:info (android.util.Log/i prefix message throwable)
|
||||
:warn (android.util.Log/w prefix message throwable)
|
||||
:error (android.util.Log/e prefix message throwable)
|
||||
:fatal (android.util.Log/e prefix message throwable)
|
||||
:report (android.util.Log/i prefix message throwable))
|
||||
:trace (android.util.Log/d ns output throwable)
|
||||
:debug (android.util.Log/d ns output throwable)
|
||||
:info (android.util.Log/i ns output throwable)
|
||||
:warn (android.util.Log/w ns output throwable)
|
||||
:error (android.util.Log/e ns output throwable)
|
||||
:fatal (android.util.Log/e ns output throwable)
|
||||
:report (android.util.Log/i ns output throwable))
|
||||
|
||||
(case level
|
||||
:trace (android.util.Log/d prefix message)
|
||||
:debug (android.util.Log/d prefix message)
|
||||
:info (android.util.Log/i prefix message)
|
||||
:warn (android.util.Log/w prefix message)
|
||||
:error (android.util.Log/e prefix message)
|
||||
:fatal (android.util.Log/e prefix message)
|
||||
:report (android.util.Log/i prefix message))))})
|
||||
:trace (android.util.Log/d ns output)
|
||||
:debug (android.util.Log/d ns output)
|
||||
:info (android.util.Log/i ns output)
|
||||
:warn (android.util.Log/w ns output)
|
||||
:error (android.util.Log/e ns output)
|
||||
:fatal (android.util.Log/e ns output)
|
||||
:report (android.util.Log/i ns output)))))})))
|
||||
|
||||
(def logcat-appender
|
||||
"DEPRECATED: Use `make-logcat-appender` instead."
|
||||
(make-logcat-appender))
|
||||
|
|
Loading…
Reference in New Issue