2016-09-20 17 views
8

Tôi có đoạn mã sau:In ấn một mảng với slf4j chỉ in phần tử đầu tiên

private static final Logger logger = LoggerFactory.getLogger(Some.class); 
... 
String[] splits=someString.split(".."); 
logger.info("The string was split into <{}>",splits); // prints first element 

đúng cách để in toàn bộ nội dung của một mảng với slf4j là gì?

+1

@ JimJim2000 Cách bạn đang in mảng là tốt, slf4j (nếu được hỗ trợ bởi log4j, logback hoặc bất kỳ triển khai nào khác) sẽ xuất nội dung của mảng. Vì vậy, bạn sẽ cần phải cho chúng tôi biết những gì "không hoạt động" chính xác có nghĩa là. Bạn có thấy bất kỳ tin nhắn slf4j nào không? Bất kỳ đầu ra? Bạn có biết rằng ['String # split()'] (http://docs.oracle.com/javase/8/docs/api/java/lang/String.html#split-java.lang.String-) phương pháp bạn đang gọi chấp nhận một regex, và rằng ".." là một regex có một ý nghĩa? –

Trả lời

14

Vấn đề là với đoạn mã sau

logger.info("The string was split into <{}>", splits); 

bạn đang gọi phương thức info(String format, Object... arguments). Lưu ý rằng đối số cuối cùng là một varargs. Vì vậy, mảng bạn vượt qua được hiểu là mỗi đối số của đối số biến.

Tuy nhiên, trong trường hợp này, bạn muốn chuyển một mảng làm đối số đầu tiên. Cách giải quyết đơn giản là truyền đến Object.

String[] splits = { "foo", "bar" }; 
logger.info("The string was split into {}", (Object) splits); 

sẽ đăng nhập The string was split into [foo, bar], như mong đợi.

+0

Ohhhhh! Vâng, đây là nó. –