我有一個構建文件,作爲構建過程的一部分依賴於幾個taskdefs。這些taskdef項目(例如webdoclet和jasper2)使用log4j作爲記錄器。理想情況下,我希望能夠爲每個配置文件提供不同的log4j配置文件,但最低限度,我希望能夠指定使用哪個log4j配置文件。如何爲不同的ant任務提供自定義log4j.xml?
我之前做過的工作是在類路徑的前面放置包含我想讓taskdef使用的log4j.xml的目錄。例如:
<target name="define.jasper2"> <path id="jspc.classpath"> <!-- Put this FIRST so Jasper will find the log4j.xml in the Build directory --> <pathelement location="Build"/> <fileset dir="${tomcat.libs}"> .... </fileset> <pathelement location="${log4j.jar}"/> .... </path> <taskdef name="jasper2" classname="org.apache.jasper.JspC" classpathref="jspc.classpath"/> </target>
我驗證過,事實上,「構建」目錄在類路徑的前面,一個log4j.xml文件在該目錄中存在。但是,當我在debug模式下以log4j在詳細模式下運行ant時,我發現log4j正在選擇當前工作目錄中的log4j.xml,這不是我想要的。 Log4j似乎沒有使用類路徑來解析默認的log4j.xml。
我正在使用log4j 1.2.8(嵌入在一個更大的框架中,所以我不能升級它),其中一些taskdefs似乎依賴於commons-logging 1.0.3。構建過程使用Sun Java 5.
如果我在運行ant之前運行set ANT_OPTS=-Dlog4j.configuration=Build/log4j.xml
,則taskdefs會正確加載所需的log4j.xml。
將「Build」目錄置於用於工作的taskdefs的類路徑前面。我不知道改變了什麼。如何恢復我可以控制的行爲 - 在build.xml中 - 給定任務使用哪個log4j配置文件?除了設置ANT_OPTS之外,還有其他一種方法,除了重新安排文件以將應用程序的log4j.xml移出當前工作目錄以獲取log4j以找到正確的log4j.xml文件嗎?
我真的寧願不用動任何文件。 – Eddie 2009-01-26 23:39:27