2010-04-07 45 views
36

Tôi cố gắng để chạy một jar với các tập tin log4j.xml trên hệ thống tập tin bên ngoài jar như vậy:log4j.xml ngoài tập tin

java -jar MyJarName.jar -cp=/opt/companyName/pathToJar/ log4j.configuration=log4j.xml argToJar1 argToJar2 

Tôi cũng đã cố gắng:

java -jar MyJarName.jar -cp=/opt/companyName/pathToJar/ log4j.configuration=/opt/companyName/pathToJar/log4j.xml argToJar1 argToJar2 

Tệp log4j.xml là tệp nằm trong cùng thư mục với jar (/ opt/companyName/pathToJar /), nhưng tôi vẫn nhận được thông báo cảnh báo chuẩn:

log4j:WARN No appenders could be found for logger (org.apache.axis.i18n.ProjectResourceBundle). 
log4j:WARN Please initialize the log4j system properly. 

Có thể không để có tập tin cấu hình bên ngoài bình, hoặc tôi phải gói nó với bình?

TIA

Trả lời

46

Khi sử dụng -jar công tắc để khởi động một file jar thực thi, classpath được lấy từ manifest file jar của. Công tắc -cp, nếu được, sẽ bị bỏ qua.

Jeff Storey's answer sẽ là giải pháp dễ nhất. Ngoài ra, bạn có thể thêm thuộc tính Class-Path vào tệp jar của manifest.

EDIT Hãy thử bật tính năng sửa lỗi log4j và tạo đường dẫn đến log4j.xml URL đủ điều kiện. Ví dụ:

java -Dlog4j.debug -Dlog4j.configuration=file:/path/to/log4j.xml -jar ... 
+0

Tôi đã thêm tệp này vào tệp kê khai và nó vẫn không hoạt động (nhưng tôi không chắc đường dẫn tương đối là hợp pháp): Đường dẫn lớp:. – javamonkey79

+0

Đường dẫn tương đối hợp lệ. Lệnh bạn sử dụng là gì? –

+0

java -Dlog4j.configuration =/path/to/log4j.xml -jar MyJarName.jar có lẽ khoảng cách giữa Class-Path: và '.' là để đổ lỗi. – javamonkey79

7

Các bạn đã thử java -Dlog4j.configuration=/path/to/log4j.xml -jar <rest-of-args>

+0

Điều này không hoạt động. – javamonkey79

+2

cần tệp: trước đường dẫn –

0

"-jar" chỉ sử dụng đường dẫn lớp bên trong bình thực thi và -cp bị bỏ qua. Đang thêm "." đến classpath trong jar thực thi nên cho phép log4j.xml trở thành fount.

15

công trình này:

java -jar -Dlog4j.configuration="file:d:\log4j.xml" myjar.jar 
1

Tôi đã có vấn đề sử dụng log4j với JDK của Sun và cấu hình tự động.

Bạn có thể sử dụng này:

String filename = System.getProperty("log4j.configuration"); 
DOMConfigurator(filename); 

trước khi sử dụng Logger.

6

bạn có thể xác định tệp thuộc tính mặc định trong bình. nếu không có thuộc tính tùy chỉnh nào được xác định, bạn có thể sử dụng tệp mặc định này.if thuộc tính tùy chỉnh được xác định bạn có thể ghi đè thuộc tính mặc định.

tệp myjar.jar chứa log4j.default.cấu hình

bạn có thể chạy chương trình của bạn với các thông số này để bắt đầu ứng dụng của bạn

java -jar -Dlog4j.configuration=log4j.properties target\yourfile-v01_000_01_c002.jar 

Ví dụ đang

public static void main(String[] args) { 
    String filename = System.getProperty("log4j.configuration"); 
    if(null==filename||filename.trim().equals("")) { 
     logger.info("Using default log4j configuration log4j.default.properties."); 
     logger.info("If you would like to change the default configuration please add following param before startup -Dlog4j.configuration=<log4jfile>"); 
     PropertyConfigurator.configure(Main.class.getResourceAsStream("/log4j.default.properties")); 
    } else { 
     File file = new File(filename); 
     if(!file.exists()) System.out.println("It is not possible to load the given log4j properties file :"+file.getAbsolutePath()); 
     else PropertyConfigurator.configure(file.getAbsolutePath()); 

    } 
} 
+1

Cảm ơn bạn! Điều này làm việc cho .properties-file. Nếu bạn sử dụng tệp cấu hình .xml thì hãy sử dụng DOMConfigurator thay vì PropertyConfigurator. –

0

java -cp "path/to/your/log4jxml: path/to/yourjar.jar" your.package.MainClass

Các log4j.xml trong thư mục "path/to/your/log4jxml" sẽ ghi đè tệp log4j.xml trong "path/to/yourjar.jar".

Vui lòng tham khảo Setting multiple jars in java classpath.

0

Cấu hình con đường đơn giản nhất cho ` 'log4j2 is using the tĩnh khối setting log4j.configurationFile`:

public class MyClass { 

    static { 
     System.setProperty("log4j.configurationFile", "./config/log4j2.xml"); 
    } 

    protected final transient Logger logger = LogManager.getLogger(IDOLTracker.class); 

    public static void main(String[] args) { 
     logger.info(""); 
    } 
} 

Sau đó, cấu trúc có thể là như sau:

ProgramFolder
| ----/config/log4j2.xml
| ---- MyClass.jar

Khi bạn chạy bình của bạn, nó sẽ nhìn bên ngoài lọ cho tệp xml.

Các vấn đề liên quan