2013-02-05 36 views
5

Đây có phải là điều tốt để làm hay không; để đăng nhập thông qua một phương pháp như thế này?Phương pháp ghi nhật ký chung

public static void log(final Object... messages) { 
    logger.info(Joiner.on(',').useForNull("null").join(messages)); 
} 

// Ở các phần khác của mã, chúng tôi có thể gọi phương thức nhật ký bằng dấu phẩy thay vì nối chuỗi. Xin lưu ý Joiner là một lớp ổi.

log(" Check ",obja.getXXX(),anotherObject.getMethod()); 

Kỳ vọng là mã sạch, tiện lợi và hiệu suất.

+2

Tôi sẽ thêm thông số thứ hai cho phép bạn chỉ định mức độ nghiêm trọng của nhật ký. – Zylth

Trả lời

2

Có thể bạn sẽ muốn tham gia trên ' ' (trống) thay vì dấu phẩy nhưng cách tiếp cận thiết kế là một ý tưởng hay.

Hiệu suất khôn ngoan, nó không lý tưởng. Bạn tạo một mảng đối tượng bổ sung và một joiner cộng với các bộ đệm bên trong của joiner.

Vì vậy, bạn chỉ có thể nhận được 2/3 với phương pháp này. Nếu bạn thực sự quan tâm đến hiệu suất, hãy sử dụng slf4j đã sử dụng phương pháp tương tự.

4

Tôi sử dụng giao diện SLF4J's Logger (với Logback triển khai), mà tôi thấy dễ đọc hơn nhiều.

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

public class Test { 
    private static final Logger logger = LoggerFactory.getLogger(Test.class); 

    public void method(String name, int age, Address address) { 
     logger.info("Person {}, age {} years old resides at {}", name, age, address); 
    } 
} 
+0

+1 Tôi cũng vậy. – Alex

+0

@ adarshr Tôi chắc chắn sẽ thử SLF4J ngay sau khi tôi có cơ hội. ty. – r0ast3d

2

Giao diện của SLF4J tốt hơn, như các câu trả lời khác nói.

Tôi không hiểu đây là cải tiến hiệu suất như thế nào. Có lẽ OP có một trường hợp sử dụng cụ thể trong tâm trí và một số mã ví dụ sẽ giải thích nó. Nếu ý tưởng là để thu thập thông báo trả trước và gửi chúng lại với nhau để yêu cầu phương thức ghi nhật ký, thì bạn sẽ được phục vụ tốt hơn bằng cách sử dụng một appender mà đệm.