logged-stream adalah perpustakaan karat yang menyediakan struktur LoggedStream yang dapat digunakan sebagai pembungkus untuk objek IO yang mendasari yang mengimplementasikan std::io::Write and std::io::Read ciri-ciri atau analog asinkronnya dari perpustakaan tokio untuk memungkinkan penebangan semua operasi bacaan dan tulis, kesalahan dan drop.
LoggedStream Struktur Konstruksi dari empat bagian:
std::io::Write and std::io::Read ciri -ciri atau analog asinkronnya dari Perpustakaan tokio : tokio::io::AsyncRead dan tokio::io::AsyncWrite .BufferFormatter yang disediakan oleh perpustakaan ini. Bagian dari LoggedStream ini bertanggung jawab atas formulir Anda akan melihat byte input dan output. Saat ini perpustakaan ini menyediakan implementasi berikut dari BufferFormatter : LowercaseHexadecimalFormatter , UppercaseHexadecimalFormatter , DecimalFormatter , BinaryFormatter dan OctalFormatter . Juga BufferFormatter adalah sifat publik sehingga Anda bebas untuk membangun implementasi Anda sendiri.RecordFilter Trait yang disediakan oleh Perpustakaan ini. Bagian dari LoggedStream ini bertanggung jawab atas penyaringan catatan log. Saat ini perpustakaan ini menyediakan implementasi RecordFilter TRAIT berikut: DefaultFilter yang menerima semua catatan log dan RecordKindFilter yang menerima log dengan jenis yang ditentukan selama konstruk. RecordFilter juga adalah sifat publik dan Anda bebas membangun implementasi Anda sendiri.Logger yang disediakan oleh perpustakaan ini. Bagian dari LoggedStream ini bertanggung jawab untuk pekerjaan lebih lanjut dengan catatan log yang dibangun, formatter, dan difilter. Misalnya, dapat dikeluarkan untuk konsol, ditulis ke file, ditulis ke database, ditulis ke memori untuk digunakan lebih lanjut atau dikirim oleh saluran. Saat ini perpustakaan ini menyediakan implementasi Tujuan Logger berikut: ConsoleLogger , MemoryStorageLogger , ChannelLogger dan FileLogger . Logger juga sifat publik dan Anda bebas membangun implementasi Anda sendiri. Untuk menggunakan logged-stream , tambahkan baris berikut ke Cargo.toml Anda. TOML:
[ dependencies ]
logged-stream = " 0.4 "Atau jalankan perintah kargo berikut di direktori proyek Anda:
$ cargo add [email protected]
Ini adalah contoh penggunaan sederhana dari struktur LoggedStream dengan std::net::TcpStream sebagai objek IO underling yang terhubung ke beberapa echo-server, formatter heksadesimal kecil, filter default dan logger konsol.
fn main ( ) {
env :: set_var ( "RUST_LOG" , "debug" ) ;
env_logger :: init ( ) ;
let mut client = LoggedStream :: new (
net :: TcpStream :: connect ( "127.0.0.1:8080" ) . unwrap ( ) ,
LowercaseHexadecimalFormatter :: new ( None ) ,
DefaultFilter :: default ( ) ,
ConsoleLogger :: new_unchecked ( "debug" ) ,
) ;
let send = [ 0x01 , 0x02 , 0x03 , 0x04 ] ;
client . write_all ( & send ) . unwrap ( ) ;
let mut response = [ 0u8 ; 4 ] ;
client . read_exact ( & mut response ) . unwrap ( ) ;
let send = [ 0x05 , 0x06 , 0x07 , 0x08 ] ;
client . write_all ( & send ) . unwrap ( ) ;
let mut response = [ 0u8 ; 4 ] ;
client . read_exact ( & mut response ) . unwrap ( ) ;
let send = [ 0x09 , 0x0a , 0x0b , 0x0c ] ;
client . write_all ( & send ) . unwrap ( ) ;
let mut response = [ 0u8 ; 4 ] ;
client . read_exact ( & mut response ) . unwrap ( ) ;
let send = [ 0x01 , 0x02 , 0x03 , 0x04 ] ;
client . write_all ( & send ) . unwrap ( ) ;
let mut response = [ 0u8 ; 4 ] ;
client . read_exact ( & mut response ) . unwrap ( ) ;
}Output ke konsol:
[2023-04-18T08:18:45.895Z DEBUG logged_stream::logger] > 01:02:03:04
[2023-04-18T08:18:45.895Z DEBUG logged_stream::logger] < 01:02:03:04
[2023-04-18T08:18:45.895Z DEBUG logged_stream::logger] > 05:06:07:08
[2023-04-18T08:18:45.895Z DEBUG logged_stream::logger] < 05:06:07:08
[2023-04-18T08:18:45.895Z DEBUG logged_stream::logger] > 09:0a:0b:0c
[2023-04-18T08:18:45.896Z DEBUG logged_stream::logger] < 09:0a:0b:0c
[2023-04-18T08:18:45.896Z DEBUG logged_stream::logger] > 01:02:03:04
[2023-04-18T08:18:45.896Z DEBUG logged_stream::logger] < 01:02:03:04
[2023-04-18T08:18:45.896Z DEBUG logged_stream::logger] x Deallocated.
Versi lengkap dari contoh ini dapat ditemukan di sana.
Contoh yang sama, tetapi ditulis ulang menggunakan API asinkron, dapat ditemukan di sana.
Berlisensi di bawah salah satu dari
di pilihan Anda.
Kecuali jika Anda secara eksplisit menyatakan sebaliknya, kontribusi apa pun secara sengaja diserahkan untuk dimasukkan dalam pekerjaan oleh Anda, sebagaimana didefinisikan dalam lisensi APACHE-2.0, harus dilisensikan ganda seperti di atas, tanpa syarat atau ketentuan tambahan.