Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Logging in Clojure

For Java development, I use Slf4j and Logback.

Logger logger = LoggerFactory.getLogger(HelloWorld.class);
logger.debug("Hello world.");

How to use these two libs in Clojure programs? Majority of Clojure programming doesn't has .class concept (possible of course via AOT).

What do you use for logging in Clojure?

like image 965
Chiron Avatar asked Mar 07 '11 12:03

Chiron


4 Answers

Clojure comes with a logging core library in tools.logging. Add [org.clojure/tools.logging "0.2.3"] to your leiningen project.clj and run $lein deps as usual.

Once you use the library you can start logging away

(use 'clojure.tools.logging)
(warn "something bad happened") 

Now you can also access the logger object and set the required fields, refer to the following article for this (written for the older contrib-lib but the same ideas apply):

http://www.paullegato.com/blog/setting-clojure-log-level/

like image 82
pyr Avatar answered Jan 01 '23 21:01

pyr


Look at this as well https://github.com/ptaoussanis/timbre . It looks very simple and nicely done.

like image 40
joshua Avatar answered Jan 01 '23 21:01

joshua


tools.logging. For details, refer to tools.logging vs clojure.contrib.logging

like image 38
Jingguo Yao Avatar answered Jan 01 '23 22:01

Jingguo Yao


some excerpts from a one of my projects that uses log4j:

log.clj:

(ns 
    #^{:author "Arthur Ulfeldt", 
       :doc "Polynomial threshold encryption"}
  com.cryptovide.log
  (:gen-class)
  (:use
   clojure.contrib.logging))

...

(def logger (org.apache.log4j.Logger/getLogger "A1"))
(def log-levels (vec ( org.apache.log4j.Level/getAllPossiblePriorities)))

...

(defn start-logging []
  (org.apache.log4j.BasicConfigurator/configure))

main.clj:

(start-logging)
(. logger setLevel (log-levels verbose-level))
like image 40
Arthur Ulfeldt Avatar answered Jan 01 '23 21:01

Arthur Ulfeldt