2012-02-16 31 views
9

Sử dụng java.util.logging.Logger đến sản lượng một số log ra cửa sổ Console chỉ như thế này:Có cách nào để xóa dòng thông tin khỏi đầu ra java.util.logging.Logger không?

public static void main(String[] args) { 
    Logger logger = Logger.getLogger("test"); 
    logger.info("Hello Wolrd!"); 
} 

Đầu ra là:

FEB 16, 2012 10:17:43 AM com.abc.HelloWorld main 
INFO: Hello World. 

này có vẻ là OK, tuy nhiên ...

Chúng tôi đang sử dụng java.util.logging.Logger trong tất cả các tác vụ Ant của chúng tôi (một tiêu chuẩn nội bộ) và chúng tôi có một dự án kiến ​​lớn. Đầu ra bàn điều khiển của một chu kỳ đầy đủ có thể lớn hơn 300KB, trong đó đầu ra của trình ghi nhật ký của chúng ta ít nhất 50.

Bây giờ tôi không muốn xem thông tin về thời gian, tên lớp và phương thức của các đầu ra Level.INFO . Ngoài ra dòng thông tin làm cho nó khó tập trung vào các tin nhắn tùy chỉnh.

Vì vậy, có cách nào để loại bỏ dòng đầu tiên (thông tin của dấu thời gian, lớp và phương pháp) từ mỗi đầu ra (hoặc chỉ từ mỗi đầu ra Level.INFO)?

+1

@ziesemer Nice. Tạo một trình định dạng, thiết lập nó cho một trình xử lý, thêm trình xử lý vào trình ghi nhật ký và đặt trình ghi nhật ký không sử dụng các trình xử lý cha. Upvote để giúp ~ – coolcfan

Trả lời

6

Xem How do I get java logging output to appear on a single line?. Tuy nhiên, sự khác biệt duy nhất là loại bỏ dòng đầu tiên, thay vì đặt nó trên một dòng.

Để chỉ thực hiện việc này cho các mức INFO, hãy mở rộng trình định dạng bạn muốn sửa đổi có điều kiện (ví dụ: SimpleFormatter) và ghi đè phương thức format. Bạn có thể làm một cái gì đó như thế này:

public String format(LogRecord record){ 
    if(record.getLevel() == Level.INFO){ 
    return record.getMessage() + "\r\n"; 
    }else{ 
    return super.format(record); 
    } 
} 

Nếu bạn đang làm điều này chỉ dành cho INFO, có thể bạn không cần "INFO:" prefix - nhưng bạn có thể thêm nó trở lại nếu bạn muốn.

+0

Sau khi đọc javadoc ... Tôi phải nói rằng tôi ghét việc thực hiện đăng nhập java. Nếu tôi muốn làm cho một handler chỉ áp dụng cho Level.INFO, tôi phải mở rộng Handler. Và đối với điều này tôi không thể sử dụng Handler của cha mẹ cho Level.SEVERE vì vậy tôi phải thêm một handler khác ... – coolcfan

+0

Đó là một phần lý do tôi sử dụng SLF4J và logback bất cứ khi nào có thể ... – ziesemer

+0

OK ... Cập nhật tốt đẹp. – coolcfan

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