2012-08-13 17 views
6

pass: log.info ("parametreler {} ve {}", Param1 Param2) derler ve eğer benScala ve SLF4J :: Aşağıdaki kodu olması birden fazla parametreye

Ancak Scala SLF4J iyi çalışır basitçe Array.toString ilk parametreyi yerine ve ilişkisiz parametrelerin kalanını bırakır

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

: daha fazla argüman geçmek istiyorum, ben Array kullanmanız gerekir.

Aşağıdaki kod

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

nedeniyle, derleme değil: Burada ne eksik

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) : _*) 

? Eğer SLF4J bağlı değilseniz

cevap

2

Sen Logula kontrol etmelidir, grizzled

gibi slf4j için scala sarmalayıcı kullanmalıdır. Son zamanlarda bununla oynuyorum ve beğendim.

+2

Her proje bağımlılığı, ileride yapılacak bir bakım çalışmasıdır. Örneğin, 2012 yılında @Falmarri tarafından belirtilen "Logula" artık "terk edilmiş" olarak işaretlendi –

-1

bu deneyin:

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

Bunu denedim. Bir hata vermez, ama doğru olanı da yapmaz. Tüm diziyi "{}" ilk argümanı üzerinde bir dizgi olarak bırakacak ve kalan boşluğu bırakacak ... – marios

1

Ben tüm türetilmiş türüne bağlıdır sanırım. Bir dizi alan log.info yöntemi bir Array [AnyRef] bekleniyor. Yani döküm alternatif olarak size

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

yapabileceğini Ama Int arasındaki örtük dönüşümler üzerinde kısıtlama var bu işe yaramaz -> AnyRef.

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

fazla ayrıntı için bu soruya bakın: Result type of an implicit conversion must be more specific than AnyRef

0

ne dize interpolasyon kullanırsanız o, bir tür yakıştırma gerekir? bu şekilde:

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

log.info (s "$ {1/0} ve .." parametrelerini) "sıfır istisna atar UYARI günlük seviyesinde –

+0

true olsa bile, tembel bir değere dönüştürebilirsiniz. tembel val bölünmüşByZero = f "$ {1/0}"; val levelWarn = true; (levelWarn) println (bölünmüşByZero); bu, yalnızca levelWarn öğesi true olduğunda NpE'yi atar. CR –

-1

İşte nasıl yaparım.

LOGGER.info ("kodlama: {} kodu: {}, uzunluk: {}", Dizi (messageWrapper, methodCode, bytes.length) .asInstanceOf [Dizi [AnyRef]])

alkış

+0

ekleyemediğimden satırları sınırlamak için noktalı virgül ekledim. Bu cevabı çoğaltdınız: http://stackoverflow.com/a/12094177/303737 –

İlgili konular