2013-02-15 35 views
11

Điều này tương tự với question khác, mặc dù tôi đã đặt logging.properties trong bình thực thi và không hoạt động.Không thể định cấu hình ghi nhật ký cho jar thực thi

Tôi có một lớp (ReportGenerator) mà có những điều sau đây:

Logger logger = Logger.getLogger(ReportGenerator.class.getName()); 
logger.log(Level.INFO, "LOG THIS"); 

Tôi đang sử dụng Netbeans vì vậy tôi đặt các tập tin logging.properties trong đường dẫn src/main/resources. Nó có này (trong số những thứ khác):

# default file output is in user's home directory. 
java.util.logging.FileHandler.pattern = /my/folder/reports.log 
java.util.logging.FileHandler.limit = 50000 
java.util.logging.FileHandler.count = 10 
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter 

# Limit the message that are printed on the console to INFO and above. 
java.util.logging.ConsoleHandler.level = OFF 
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter 


############################################################ 
# Facility specific properties. 
# Provides extra control for each logger. 
############################################################ 

# For example, set the com.xyz.foo logger to only log SEVERE 
# messages: 
com.mypackage.ReportGenerator.level = ALL 

Bình được tạo ra sử dụng Maven, khi giải nén tôi có thể thấy rằng logging.properties là trong thư mục chính của jar. Cùng với thư mục com nơi lớp học của tôi.

-com 
    -mypackage 
     -ReportGenerator 
logging.properties 
...other things 

Khi tôi chạy từ giao diện điều khiển:

java - jar MyReportsJar.jar 

Nó chỉ cho tôi các bản ghi thông qua giao diện điều khiển. Tôi muốn đăng nhập vào tệp tôi đã đặt trong logging.properties.

Tôi đang làm gì sai? Làm cách nào để thực hiện điều đó mà không cần đặt thông số JVM java.util.logging.config.file?

Trả lời

12

Sau khi giải quyết một vài ngày trước đây và đọc nhiều tài nguyên trên Internet tôi đã đưa ra giải pháp này:

tôi phải thay đổi các thuộc tính khai thác gỗ của LogManager trong chương trình. Tôi có thể sử dụng logging.properties tập tin đóng gói trong .jar như thế này:

LogManager.getLogManager().readConfiguration(ReportGenerator.class.getClassLoader().getResourceAsStream("logging.properties")); 

Và sau đó tôi có thể làm điều tương tự như trước đây để có được những logger và đăng nhập:

Logger logger = Logger.getLogger(ReportGenerator.class.getName()); 
logger.log(Level.INFO, "LOG THIS"); 

Nhưng tôi thấy rất hữu ích mà bạn có thể chỉ định một logging.properties file trên runtime do đó, mã cuối cùng của tôi là thế này:

 String logFile = System.getProperty("java.util.logging.config.file"); 
     if(logFile == null){ 
      LogManager.getLogManager().readConfiguration(ReportGenerator.class.getClassLoader().getResourceAsStream("logging.properties")); 
     }     
     Logger logger = Logger.getLogger(ReportGenerator.class.getName()); 
     logger.log(Level.INFO, "LOG THIS"); 

Bằng cách đó

, nếu tôi thực hiện jar như thế này:

java -jar MyReportsJar.jar 

Sử dụng tệp nội bộ logging.properties.

Nhưng nếu tôi thực hiện:

java -Djava.util.logging.config.file=<external-logging.properties> -jar MyReportsJar.jar 

nó sử dụng logging.properties tập tin bên ngoài.

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