2014-10-29 62 views
6

Trong các lớp dự án của tôi, tôi đã sử dụng java.util.logging.Logger và thêm nhiều đầu ra nhật ký khác nhau trong mã của tôi, sử dụng các mức nhật ký khác nhau.Cấp độ ghi nhật ký mức độ đầu ra

src/main/java/Run.java

import java.util.logging.Level; 
import java.util.logging.Logger; 

public class Run{ 


    public static void main(String args[]){ 
     System.out.println("Hello World"); 

     logger.log(Level.CONFIG, "Just some config info"); 
     Logger logger = Logger.getLogger(Run.class.getName()); 
     logger.log(Level.INFO, "Just logging some info"); 
     logger.log(Level.FINE, "Fine logging"); 
     logger.log(Level.FINER, "Finer logging"); 
     logger.log(Level.WARNING, "This is a warning log!"); 

    } 
} 

Hiện nay khi tôi chạy gradle -i test tất cả các tin nhắn đăng nhập với Level.INFO định nghĩa được trình bày nhưng không ai trong số các cấu hình, cảnh báo hoặc thông điệp tốt là đầu ra.

tôi đã cố gắng cập nhật build.gradle tôi tập tin như vậy:

apply plugin: 'java' 
apply plugin:'application' 
mainClassName = "Run" 

repositories { 
    mavenCentral() 
} 

dependencies { 
    testCompile "junit:junit:4.11" 
} 

run{ 
    systemProperties = ['java.util.logging.config.file' : 'logging.properties'] 
} 

Tôi đã bao gồm:

systemProperties = ['java.util.logging.config.file' : 'logging.properties'] 

Sau đó tạo /src/main/tài nguyên/khai thác gỗ. propertiess

handlers= java.util.logging.ConsoleHandler 
.level= CONFIG 
java.util.logging.ConsoleHandler.level = FINER 
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter 

Chạy:

gradle run 

tôi nhận được:

:compileJava UP-TO-DATE 
:processResources UP-TO-DATE 
:classes UP-TO-DATE 
:run 
Hello World 

BUILD SUCCESSFUL 

Và khi chạy gradle -i chạy tôi nhận được: quá trình bắt đầu thành công 'lệnh' /Library/Java/JavaVirtualMachines/jdk1.8.0_20 .jdk/Nội dung/Trang chủ/bin/java '' Hello World : chạy (Chủ đề [chính, 5, chính]) đã hoàn thành. Mất 0,202 giây.

BUILD SUCCESSFUL 

ie. không có thông tin đăng nhập. Tuy nhiên ý kiến ​​ra system.properties từ bên trong nhiệm vụ chạy và tái chạy gradle chạy -i tôi nhận được:

Successfully started process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home/bin/java'' 
Hello World 
Nov 05, 2014 12:07:42 PM Run main 
INFO: Just logging some info 
Nov 05, 2014 12:07:42 PM Run main 
WARNING: This is a warning log! 
:run (Thread[main,5,main]) completed. Took 0.229 secs. 

BUILD SUCCESSFUL 

Thông báo thông tin và mức độ cảnh báo các bản ghi, nhưng không phải là những mỹ hoặc tốt hơn.

tldr;

Làm cách nào để nhận cấu hình, tiền phạt & nhật ký cấp độ mịn hơn để đăng nhập vào bảng điều khiển trong dự án java gradle chung?

Trả lời

8

Một số tùy chọn (Cá nhân tôi thích lựa chọn 2.2):

1) Tuỳ chỉnh logging.properties file:

Java Logging API có một tập tin cấu hình đăng nhập mặc định tại <JRE_HOME>/lib/logging.properties. Bạn có thể sử dụng tệp cấu hình của riêng bạn thiết lập thuộc tính JVM java.util.logging.config.file.

handlers = java.util.logging.ConsoleHandler 

Run.handlers = java.util.logging.ConsoleHandler 
Run.level = FINER 
Run.useParentHandlers = false 

java.util.logging.ConsoleHandler.level = ALL 
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter 

Bạn phải đặt useParentHandlers = false để tránh nhận bản in trùng lặp từ trình xử lý gốc.

1.1) Đặt trên tài sản với đường dẫn tuyệt đối

đã thậm chí không thử ;-)

1,2) tập tin tùy chỉnh tải như sau trong Run.java

tải nó như sau trong Run.java:

InputStream inputStream = Run.class.getResourceAsStream("mylogging.properties"); 
    try { 
     LogManager.getLogManager().readConfiguration(inputStream); 
    } catch(Exception e) { 
     e.printStackTrace(); 
    } 

2) Thuộc tính hệ thống tùy chỉnh (ví dụ: logLevel)

Xác định một systemProperty trong bạn build.gradle:

run { 
    systemProperty 'logLevel', System.getProperty('logLevel') 
} 

Thêm một defaultLogLevel trong Run.java:

public static Level defaultLevel = Level.INFO; 

Lấy giá trị của tài sản logLevel:

String logLevel = System.getProperty("logLevel"); 

Và thiết lập mức độ quy định tại logger:

Logger logger = Logger.getLogger(Run.class.getName()); 
logger.setLevel(logLevel.isEmpty() ? defaultLevel : Level.parse(logLevel)); 

2,1) Tạo mới ConsoleHandler và switch-off in từ xử lý mẹ

System.out.println(Run.class.getName()); 
    Logger logger = Logger.getLogger(Run.class.getName()); 
    logger.setLevel(logLevel.isEmpty() ? defaultLevel : Level.parse(logLevel)); 

    Handler consoleHandler = new ConsoleHandler(); 
    consoleHandler.setLevel(logLevel.isEmpty() ? defaultLevel : Level.parse(logLevel)); 
    logger.addHandler(consoleHandler); 

    logger.setUseParentHandlers(false); 

2,2) Tìm mẹ ConsoleHandler và bộ định mức

Logger topLogger = Logger.getLogger(""); 

    Handler consoleHandler = null; 
    for (Handler handler : topLogger.getHandlers()) { 
     if (handler instanceof ConsoleHandler) { 
      //found the console handler 
      consoleHandler = handler; 
      break; 
     } 
    } 

    if (consoleHandler == null) { 
     // not found, create a new one 
     consoleHandler = new ConsoleHandler(); 
     topLogger.addHandler(consoleHandler); 
    } 
    //set the console handler level 
    consoleHandler.setLevel(logLevel.isEmpty() ? defaultLevel : Level.parse(logLevel)); 

Với điều đó, gradle run mang lại các thông báo trên mức mặc định (INFO). Với

gradle run -DlogLevel=FINE 

bạn có thể kiểm soát thông điệp nào được hiển thị.

+0

Nếu sử dụng SLF4J với logback, lưu ý rằng giao diện 'org.slf4j.Logger' không có phương thức' setLevel'. Nhưng 'ch.qos.logback.classic.Logger' thực hiện giao diện này và có phương thức này. Để tạo ra 'Logger' bạn do đó phải nhập vào lớp thứ hai thay vào đó, và sau đó cast như sau:' Logger LOGGER = (Logger) LoggerFactory.getLogger (MyClass.class) ' –

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