pembungkus slf4j
Sebagian besar pustaka logging Scala memiliki beberapa pembungkus di sekitar kerangka kerja logging Java (slf4j, log4j dll), tetapi pada Maret 2015, pustaka log yang bertahan semua slf4j. Pustaka log ini menyediakan semacam log
objek yang dapat Anda panggil info(...)
, debug(...)
dll. Saya bukan penggemar slf4j, tetapi sekarang tampaknya merupakan kerangka kerja logging yang dominan. Berikut deskripsi SLF4J :
Simple Logging Facade for Java atau (SLF4J) berfungsi sebagai fasad atau abstraksi sederhana untuk berbagai kerangka kerja logging, misalnya java.util.logging, log4j dan logback, memungkinkan pengguna akhir untuk memasukkan kerangka logging yang diinginkan pada waktu penempatan.
Kemampuan untuk mengubah pustaka log yang mendasarinya pada waktu penyebaran menghadirkan karakteristik unik bagi seluruh keluarga penebang slf4j, yang perlu Anda perhatikan:
- classpath sebagai pendekatan konfigurasi . Cara slf4j mengetahui pustaka logging mana yang Anda gunakan adalah dengan memuat kelas dengan beberapa nama. Saya punya masalah di mana slf4j tidak mengenali logger saya ketika classloader dikustomisasi.
- Karena fasad sederhana mencoba menjadi penyebut yang umum, ia hanya terbatas pada panggilan log yang sebenarnya. Dengan kata lain, konfigurasi tidak dapat dilakukan melalui kode.
Dalam proyek besar, sebenarnya bisa nyaman untuk dapat mengendalikan perilaku logging dari dependensi transitif jika semua orang menggunakan slf4j.
Penebangan Scala
Scala Logging ditulis oleh Heiko Seeberger sebagai penerus slf4s- nya . Ini menggunakan makro untuk memperluas panggilan ke ekspresi jika untuk menghindari panggilan log berpotensi mahal.
Scala Logging adalah perpustakaan pencatatan log yang nyaman dan performan yang membungkus perpustakaan logging seperti SLF4J dan yang lainnya.
Penebang historis
- Logula , pembungkus Log4J yang ditulis oleh Coda Hale. Dulu suka yang ini, tapi sekarang sudah ditinggalkan.
- configgy , pembungkus java.util.logging yang dulu populer di hari-hari awal Scala. Sekarang ditinggalkan.
Dengan Scala 2.10+ Pertimbangkan ScalaLogging oleh Typesafe. Menggunakan makro untuk memberikan API yang sangat bersih
https://github.com/typesafehub/scala-logging
Mengutip dari wiki mereka:
Setelah makro diterapkan, kode akan diubah menjadi idiom yang dijelaskan di atas.
Selain itu ScalaLogging menawarkan sifat
Logging
yang dengan mudah memberikanLogger
contoh diinisialisasi dengan nama kelas yang dicampur menjadi:sumber
class MyClass with Logging
."com.typesafe" %% "scalalogging-slf4j" % "1.1.0"
.Menggunakan slf4j dan pembungkus bagus tetapi penggunaan itu dibangun di interpolasi rusak ketika Anda memiliki lebih dari dua nilai untuk interpolasi, sejak itu Anda perlu membuat Array nilai untuk interpolasi.
Solusi yang lebih mirip Scala adalah dengan menggunakan thunk atau cluster untuk menunda penyatuan pesan kesalahan. Contoh yang bagus untuk hal ini adalah Lift's logger
Log.scala Slf4jLog.scala
Yang terlihat seperti ini:
Perhatikan bahwa msg adalah nama panggilan dan tidak akan dievaluasi kecuali isTraceEnabled benar sehingga tidak ada biaya dalam menghasilkan string pesan yang bagus. Ini bekerja di sekitar mekanisme interpolasi slf4j yang membutuhkan parsing pesan kesalahan. Dengan model ini, Anda dapat menginterpolasi sejumlah nilai ke dalam pesan kesalahan.
Jika Anda memiliki sifat terpisah yang mencampur Log4JLogger ini ke dalam kelas Anda, maka Anda bisa melakukannya
dari pada
sumber
Jangan gunakan Logula
Saya sebenarnya telah mengikuti rekomendasi dari Eugene dan mencobanya dan menemukan bahwa ia memiliki konfigurasi yang canggung dan mengalami bug, yang tidak diperbaiki (seperti ini ). Itu tidak terlihat terpelihara dengan baik dan tidak mendukung Scala 2.10 .
Gunakan slf4s + slf4j-simple
Kunci Keuntungan:
-Dorg.slf4j.simplelogger.defaultlog=trace
ke perintah eksekusi atau hardcode di skrip Anda:System.setProperty("org.slf4j.simplelogger.defaultlog", "trace")
. Tidak perlu mengelola file konfigurasi sampah!Run/Debug Configurations
dan menambahkan-Dorg.slf4j.simplelogger.defaultlog=trace
keVM options
.Inilah yang Anda perlukan untuk menjalankannya dengan Maven:
sumber
Beginilah cara saya mendapatkan Scala Logging bekerja untuk saya:
Letakkan ini di
build.sbt
:Kemudian, setelah melakukan
sbt update
, ini mencetak pesan log ramah:Jika Anda menggunakan Play, tentu saja Anda hanya
import play.api.Logger
dapat menulis pesan log:Logger.debug("Hi")
.Lihat dokumen untuk info lebih lanjut.
sumber
log4j.properties
di dalam folder sumber daya proyek.Saya menarik sedikit pekerjaan dari
Logging
sifat ituscalax
, dan menciptakan sifat yang juga mengintegrasikanMessageFormat-based
perpustakaan.Maka hal-hal seperti ini terlihat seperti ini:
Kami menyukai pendekatan sejauh ini.
Penerapan:
sumber
Saya menggunakan SLF4J + Logback klasik dan menerapkannya seperti ini:
Maka Anda dapat menggunakannya mana yang lebih cocok dengan gaya Anda:
tetapi pendekatan ini tentu saja menggunakan instance logger per instance kelas.
sumber
Anda harus melihat pada perpustakaan scalax: http://scalax.scalaforge.org/ Di perpustakaan ini, ada sifat Logging, menggunakan sl4j sebagai backend. Dengan menggunakan sifat ini, Anda bisa login dengan mudah (cukup gunakan bidang logger di kelas yang mewarisi sifat itu).
sumber
Writer
,Monoid
danMonad
implementasi.sumber
Belum mencobanya, tetapi Configgy tampak menjanjikan untuk konfigurasi dan masuk log:
http://github.com/robey/configgy/tree/master
sumber
Formulir cepat dan mudah.
Scala 2.10 dan lebih lama:
Dan build.sbt:
Scala 2.11+ dan yang lebih baru:
Dan build.sbt:
sumber
Setelah menggunakan slf4s dan logula untuk sementara waktu, saya menulis
loglady
, slf4j pembungkus sifat logging sederhana.Ini menawarkan API yang mirip dengan perpustakaan logging Python, yang membuat kasus umum (string dasar, pemformatan sederhana) sepele dan menghindari memformat boilerplate.
http://github.com/dln/loglady/
sumber
Saya merasa sangat nyaman menggunakan beberapa jenis java logger, sl4j misalnya, dengan pembungkus scala sederhana, yang membawa saya sintaksis seperti
Menurut pendapat saya sangat berguna mixin dari kerangka kerja logging java terbukti dan sintaksis mewah scala.
sumber