簡體   English   中英

Scala和SLF4J ::傳遞多個參數

[英]Scala and SLF4J :: pass multiple parameters

擁有以下代碼:log.info(“parameters {}和{}”,param1,param2)在Scala中編譯並與SLF4J一起使用

但是如果我想傳遞更多參數,我需要使用Array:

log.info("parameters {} and {} and {}", Array(param1, param2,param3)) 

它只是用array.toString替換第一個參數,並使其余參數保持未綁定狀態。

以下代碼

log.info("parameters {} and {} and {}", Array(param1, param2,param3) : _*) 

不編譯,因為:

error: overloaded method value info with alternatives:
(org.slf4j.Marker,java.lang.String)Unit <and>
(java.lang.String,java.lang.Throwable)Unit <and>
(java.lang.String,Array[java.lang.Object])Unit <and>
(java.lang.String,Any)Unit
cannot be applied to (java.lang.String, Any)
log.info("parameters {} and {} and {}", Array(param1, param2,param3) : _*) 

我在這里錯過了什么?

我猜這一切都取決於推斷的類型。 采用數組的log.info方法需要一個Array [AnyRef]。 所以作為演員陣容的替代品,你可以做到

log.info("parameters {} and {} and {}", Array[AnyRef](1, 2, "a"): _*)

但這不起作用,因為對Int - > AnyRef之間的隱式轉換有限制。 對於那些,你需要一個類型歸屬:

log.info("parameters {} and {} and {}", 
   Array[AnyRef](1: Integer, 2: Integer, "a"): _*)

有關更多詳細信息,請參閱此問題: 隱式轉換的結果類型必須比AnyRef更具體

你應該使用Scala的包裝器SLF4J像頭發花白

如果您不受slf4j的約束,您應該查看Logula 我最近一直在玩這個,我喜歡它。

如果使用字符串插值怎么辦? 像這樣:

log.info(f"parameters ${param1} and ${param2} and ${param3}")

試試這個:

Array(...).asInstanceOf[Array[Object]]

我就是這樣做的。

LOGGER.info(“encode:{},code:{},length:{}”,Array(messageWrapper,methodCode,bytes.length).asInstanceOf [Array [AnyRef]])

干杯

暫無
暫無

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

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