2012-04-29 48 views
8

Tôi mới dùng API ghi nhật ký Java và cần trợ giúp về vấn đề này: Trong khi tạo ứng dụng, tệp cấu hình của tôi được lưu trữ trong thư mục gốc của dự án, vì vậy tôi đã sử dụng chuyển đổi -Djava.util.logging.config.file=logging.properties để chạy chương trình. Nhưng sau đó tôi đã xuất JAR thực thi. Cách định cấu hình đăng nhập ngay bây giờ? Nó không hoạt động, khi tôi chỉ định đường dẫn đến tập tin cấu hình với chuyển đổi -D.Cách định cấu hình ghi nhật ký khi chạy JAR?

Trả lời

6

Bạn không thể chỉ định đối số JVM vào file MANIFEST.MF vì vậy bạn phải xác định các tính chất khai thác gỗ tại cửa sổ dòng lệnh hoặc với một phím tắt:

java -Djava.util.logging.config.file=logging.properties -jar yourjar.jar 

Nếu không, bạn có thể gói nộp tính (logging.properties trong trường hợp của bạn) trong JAR, đọc rằng tại khởi động và đặt các cài đặt đó vào các thuộc tính hệ thống.

3

The javadoc nói:

Bên cạnh đó, LogManager sử dụng hai thuộc tính hệ thống tùy chọn cho phép kiểm soát nhiều hơn đọc cấu hình ban đầu:

"java.util.logging.config.class" 
"java.util.logging.config.file" 

Hai thuộc tính có thể được thiết lập thông qua Preferences API hoặc dưới dạng lệnh định nghĩa thuộc tính dòng cho lệnh "java" hoặc dưới dạng thuộc tính hệ thống định nghĩa được chuyển đến JNI_CreateJavaVM.

Nếu thuộc tính "java.util.logging.config.class" được đặt, thì giá trị thuộc tính được coi là tên lớp. Lớp được cho sẽ là được nạp, một đối tượng sẽ được khởi tạo, và hàm tạo của đối tượng chịu trách nhiệm đọc trong cấu hình ban đầu. (Đối tượng đó có thể sử dụng các thuộc tính hệ thống khác để kiểm soát cấu hình của nó.) Lớp cấu hình thay thế có thể sử dụng readConfiguration (InputStream) để xác định các thuộc tính trong LogManager.

Vì vậy, hoặc là sử dụng thuộc tính java.util.logging.config.file hệ thống, và lưu trữ các tập tin cấu hình ra khỏi file jar (mà có lẽ là một ý tưởng tốt nếu bạn muốn để có thể tùy chỉnh các thuộc tính khai thác gỗ để debug hoặc phân tích một số hành vi kỳ lạ) hoặc lưu trữ tệp cấu hình ở bất cứ nơi nào bạn muốn (ví dụ: trong tệp jar) và sử dụng thuộc tính hệ thống java.util.logging.config.class để tải và khởi tạo lớp sẽ đọc tệp trong tệp jar (Sử dụng Class.getResourceAsStream()).

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