簡體   English   中英

如何在slf4j中記錄非字符串項

[英]How to log non-string item in the slf4j

似乎slf4j的方法只接受字符串參數,在使用其方法時是否必須將所有內容轉換為字符串?

為消息類型要求String而不是Object的主要原因是為了避免方法簽名中的歧義。

采取以下簽名:

1) debug(Object) // a message
2) debug(Object, Object) // message followed by a parameter
3) debug(Object, Exception)  // message followed by an exception

然后,當你寫作

debug("hello", new Exception("world"));

目前尚不清楚是否應使用變體2或變體3。

在任何情況下,使用現有的SLF4J API,您始終可以編寫:

  logger.debug("{}", yourObject);

如果底層日志記錄框架是logback,那么所有appender都可以使用yourObject。 其他日志記錄框架不支持消息參數,因此SLF4J必須在調用底層框架之前格式化消息。

似乎slf4j的方法只接受字符串參數,在使用其方法時是否必須將所有內容轉換為字符串?

如果你在談論像Logger.debug(String message)這樣的1參數方法,那么你就是。 但是還有其他方法,如Logger.debug(String format, Object[] args) ,不需要這樣做。

我不確定為什么sl4fj的API是這樣的(例如log4j的API不是),但它可能是以下組合:

  • 試圖滿足底層日志框架行為,
  • 試圖最小化性能影響,並且
  • “實施者的特權”。

(最后一個原則是,如果一個人沒有回答某個設計委員會的設計/實施某些事情,他對風格等的看法比其他任何人都重要。)

嘗試

String.valueOf(yourObject)

然后確保你的toString()方法實際上是有意義的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM