Tôi có một tệp xây dựng như là một phần của quá trình xây dựng dựa trên một số nhiệm vụ. Các mục taskdef này (ví dụ: webdoclet và jasper2) sử dụng log4j làm trình ghi nhật ký. Lý tưởng nhất, tôi muốn có thể cung cấp một tệp cấu hình log4j khác nhau cho mỗi tệp, nhưng tối thiểu, tôi muốn có thể chỉ định tệp cấu hình log4j nào được sử dụng.Làm cách nào tôi có thể cung cấp log4j.xml tùy chỉnh cho các tác vụ kiến khác nhau?
Những gì tôi đã làm mà được sử dụng để làm việc là đặt ở phía trước của classpath thư mục chứa log4j.xml mà tôi muốn taskdef sử dụng. Ví dụ:
<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>
Tôi đã xác minh rằng, trên thực tế, thư mục "Xây dựng" nằm ở phía trước đường dẫn lớp và tệp log4j.xml tồn tại trong thư mục đó. Tuy nhiên, khi tôi chạy ant ở chế độ tiết với log4j trong debug, tôi thấy log4j đang chọn log4j.xml nằm trong thư mục làm việc hiện tại hiện tại, không phải là cái tôi muốn. Log4j dường như không sử dụng classpath để giải quyết log4j.xml mặc định.
Tôi đang sử dụng log4j 1.2.8 (được nhúng trong một khung lớn hơn, vì vậy tôi không thể nâng cấp nó) và một số nhiệm vụ này xuất hiện dựa vào ghi nhật ký 1.0.3. Quá trình xây dựng sử dụng Sun Java 5.
Nếu tôi set ANT_OPTS=-Dlog4j.configuration=Build/log4j.xml
trước khi chạy ant, taskdefs tải đúng log4j.xml mong muốn.
Đặt thư mục "Xây dựng" ở phía trước đường dẫn lớp cho các nhiệm vụ được sử dụng để hoạt động. Tôi không biết điều gì đã thay đổi. Làm thế nào tôi có thể khôi phục lại hành vi mà tôi có thể kiểm soát - trong tệp build.xml - tệp cấu hình log4j nào được sử dụng cho một tác vụ cụ thể? Có cách nào khác hơn là thiết lập ANT_OPTS và khác hơn là sắp xếp lại các tệp để di chuyển log4j.xml của ứng dụng ra khỏi thư mục làm việc hiện tại để nhận log4j để tìm tệp log4j.xml đúng không?
Tôi thực sự muốn không phải di chuyển bất kỳ tệp nào xung quanh. – Eddie