Apakah ada keuntungan menggunakan {}
daripada penggabungan string?
Contoh dari slf4j
logger.debug("Temperature set to {}. Old temperature was {}.", t, oldT);
dari pada
logger.debug("Temperature set to"+ t + ". Old temperature was " + oldT);
Saya pikir ini tentang pengoptimalan kecepatan karena evaluasi parameter (dan penggabungan string) dapat dihindari dalam runtime tergantung pada file konfigurasi. Tetapi hanya dua parameter yang memungkinkan, maka terkadang tidak ada pilihan lain selain penggabungan string. Membutuhkan pandangan tentang masalah ini.
sumber
Versi singkat: Ya, lebih cepat, dengan lebih sedikit kode!
Penggabungan string melakukan banyak pekerjaan tanpa mengetahui apakah itu diperlukan atau tidak (pengujian tradisional "sedang debugging diaktifkan" yang dikenal dari log4j), dan harus dihindari jika memungkinkan, karena {} memungkinkan penundaan panggilan toString () dan konstruksi string ke setelah diputuskan apakah acara tersebut perlu direkam atau tidak. Dengan memiliki format logger satu string kode menjadi lebih bersih menurut saya.
Anda dapat memberikan sejumlah argumen. Perhatikan bahwa jika Anda menggunakan versi lama sljf4j dan Anda memiliki lebih dari dua argumen
{}
, Anda harus menggunakannew Object[]{a,b,c,d}
sintaks untuk meneruskan larik. Lihat misalnya http://slf4j.org/apidocs/org/slf4j/Logger.html#debug(java.lang.String, java.lang.Object []) .Mengenai kecepatan: Ceki sempat membukukan patokan di salah satu daftar.
sumber
debug(String format, Object... arguments)
,. Lihat slf4j.org/faq.html#logging_performanceKarena, String tidak dapat diubah di Java, jadi String kiri dan kanan harus disalin ke String baru untuk setiap pasangan penggabungan. Jadi, lebih baik pilih placeholder.
sumber
Alternatif lainnya adalah
String.format()
. Kami menggunakannya di jcabi-log (pembungkus utilitas statis di sekitar slf4j).Ini jauh lebih mudah dirawat dan diperpanjang. Selain itu, mudah untuk diterjemahkan.
sumber
value
berubah, Anda harus kembali dan mengubah pernyataan logging juga. Sesuatu yang IDE tidak akan membantu Anda. Logger harus membantu dengan debugging dan tidak menghalangi itu. :-)String.format("%d", "Test")
menghasilkan peringatan IntelliJArgument type 'String' does not match the type of the format specifier '%d'.
. Meskipun, saya tidak yakin ini masih dapat memberikan respons cerdas ini saat bekerja dengan solusi di atas.Saya pikir dari sudut pandang penulis, alasan utamanya adalah untuk mengurangi overhead untuk penggabungan string. Saya baru saja membaca dokumentasi logger, Anda dapat menemukan kata-kata berikut:
sumber