2009-12-23 24 views
24

Tôi muốn thoát khỏi rất nhiều này ...Có API Java 1.5 varargs cho slf4j chưa?

public void info(String msg); 
public void info(String format, Object arg); 
public void info(String format, Object arg1, Object arg2); 
public void info(String format, Object[] argArray); 

... và thay thế bằng một này ...

public void info(String format, Object ... args); 

... để cú pháp đăng nhập của tôi không phải thay đổi tùy thuộc vào số lượng đối số tôi muốn đăng nhập. Dường như có rất nhiều cuộc thảo luận và làm việc xung quanh nó, nhưng nó ở đâu? Hoặc tôi nên quấn wrapper đó là slf4j?

+3

Nếu dự án mã nguồn mở không chấp nhận các bản vá của bạn và bạn cần chức năng cụ thể, thì câu trả lời có vẻ khá rõ ràng, phải không? – kdgregory

+0

@ kdgregory - không, không rõ ràng và không hoạt động như thế nào; đó là một tư duy thương mại (fatalist), trong đó software = vendor.pay(). requestFeature(). receiveUpgrade(); nếu bắt UnsupportedException, đó là Nhà cung cấp mới() || self.screwed(). Nhưng openSource = public.download(). Use(). RequestFeature(). AwaitUntil (public.getConsensus()); nếu đồng thuận <= chi phí (trong thời gian hoặc $$), nó sẽ đáng giá. Phần lớn thời gian của tôi (như là nhà phát triển sw thương mại) được dành cho việc thực hiện các cải tiến được hình thành kém có động lực không phải bởi sự đồng thuận/ý thức chung, mà là dollar.received(). Tôi cũng dự kiến ​​sẽ duy trì này.mess, thêm vào chi phí trong tương lai. – michael

+0

@michael_n - không chắc chắn cách bạn diễn giải nhận xét của mình, nhưng câu trả lời rõ ràng là "tạo thành ngã ba". Thật tuyệt nếu các nhà bảo trì dự án muốn những điều tương tự bạn làm, nhưng nó không phải lúc nào cũng xảy ra. – kdgregory

Trả lời

4

Từ đọc SLF4J javadoc cho Logger, câu trả lời đơn giản dường như không có. Từ những gì tôi đã đọc họ muốn ở lại tương thích với các phiên bản cũ của JDK.

Nếu bạn không thực sự gắn với việc sử dụng SLF4J thì có lẽ log5j là một tùy chọn?

+1

+1 cho tham chiếu log5j - âm thanh gọn gàng! –

+0

Không, họ muốn ở lại nhị phân tương thích với verdions cũ hơn của slf4j. –

14

Câu hỏi thực sự là "Tại sao phải một jdk < 5 được hỗ trợ của thành viên này nữa"? Nếu bạn có phiên bản cũ hơn của java, hãy sử dụng API cũ hơn. Nó đơn giản mà. Tại sao không làm cho điều này phù hợp hơn vào thế giới java hiện tại? Ý tôi là, JDK 5 thậm chí không được hỗ trợ nếu không có hợp đồng hỗ trợ từ Sun/Oracle. Khả năng tương thích ngược là một trò đùa trong trường hợp này.

+1

Hỗ trợ phụ thuộc vào nền tảng. IBM hỗ trợ 1,4 ón nền tảng của họ. –

+0

Ồ, và câu trả lời là "tại sao phải ..." là Ceki, nhà độc tài nhân từ slf4j, muốn nó như vậy. –

+2

Tôi không hiểu ... tại sao không làm cho slf4j 2.x tương thích với Java 5, và giữ slf4j 1.x tương thích với java 0.0.1? – rustyx

5

gì về điều này:

package util; 

public class Util { 
    public static Object[] va(Object... args) { 
    return args; 
    } 
} 

package foo; 
import static util.Util.va; 
... 
logger.info("a {}, b {}, c c {}", va("A", "B", "C")); 
... 

bạn có thể sử dụng va() ở những nơi khác nữa.

1

Có giải pháp sử dụng varargs với SLF4J.

Có một dự án mã nguồn mở tên là Lumberjack mở rộng SLF4J để cung cấp phương thức ghi nhật ký varargs. Phần mở rộng là rất tự nhiên, bạn không cảm thấy bất kỳ sự khác biệt so với sử dụng SLF4J (điều này là do Lumberjack chỉ là một trình bao bọc xung quanh SLF4J, vì vậy tất cả các chức năng vẫn được cung cấp bởi SLF4J).

sử dụng Ví dụ:

JackLogger logger = JackLoggerFactory.getLogger(LoggerFactory.getLogger(Weather.class)); 

logger.info("Hello {}! The current time is {}:{}:{}, and after {} hours the weather will be {}.", "Jack", 13, 30, 0, 5, "sunny"); 

Lumberjack website: https://github.com/bogdanu/lumberjack

Giấy phép Lumberjack là giống như giấy phép SLF4J của, giấy phép MIT, vì vậy không có hạn chế cấp giấy phép bổ sung.

Disclaimer: Tôi là tác giả của Lumberjack

0

Hãy thử jcabi-log toolkit, mà kết thúc tốt đẹp SLF4J đăng nhập với một giao diện conveninent vararg.

11

Điều này cuối cùng đã được giải quyết. SLF4J 1.7.0 hiện yêu cầu JDK 1.5 và có các phương pháp varargs tương thích ngược.