由于logback暂时不能用,所以这里先用log4j顶一下。
project.clj文件如下:
(defproject my-website "0.1.0" :description "example rest service" :dependencies [[org.clojure/clojure "1.4.0"] [com.novemberain/monger "1.4.1"] [log4j/log4j "1.2.16" :exclusions [javax.mail/mail javax.jms/jms com.sun.jdmk/jmxtools com.sun.jmx/jmxri]] [org.clojure/tools.logging "0.2.4"] [noir "1.3.0-beta3"]] :main my-website.server)
就是添加了log4j和tools.logging 依赖。
src目录下添加一个log4j.properties文件:
log4j.rootLogger=DEBUG, FILE log4j.addivity.org.apache=true log4j.appender.FILE=org.apache.log4j.FileAppender log4j.appender.FILE.File=/opt/web.log log4j.appender.FILE.Append=false log4j.appender.FILE.layout=org.apache.log4j.PatternLayout log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
server.clj文件:
(ns my-website.server (:require [noir.server :as server]) (:use [clojure.tools.logging :only (info error)])) (server/load-views-ns 'my-website.views) (server/load-views-ns 'my-website.rest.test) (defn -main [& m] (org.apache.log4j.BasicConfigurator/configure) (info "enter -main") (let [mode (keyword (or (first m) :dev)) port (Integer. (get (System/getenv) "PORT" "8080"))] (server/start port {:mode mode :ns 'my-website})))
在-main函数中第一行是必须的(org.apache.log4j.BasicConfigurator/configure), 否则log4j会报错。
之后(info ...) 就是记录日志。
我这里还遇到一个问题,lein run不能将resources/log4j.properties文件自动复制到target/classes目录下,所以每次我都是手动复制一次。
现在运行lein run,看到/opt/web.log日志了:
[framework] 2013-01-02 19:54:38,873 - my-website.server -0 [main] INFO my-website.server - enter -main
提到[null] 的问题。但是我这里发现只需要在log4j.properties文件中在ConversionPattern里面指定[framework]就解决了。