logged-stream เป็นไลบรารีสนิมที่ให้โครงสร้าง LoggedStream ซึ่งสามารถใช้เป็น wrapper สำหรับวัตถุ IO พื้นฐานซึ่งใช้ std::io::Write และ std::io::Read ลักษณะหรืออะนาล็อกแบบอะซิงโครนัสจาก tokio Library
โครงสร้าง LoggedStream สร้างจากสี่ส่วน:
std::io::Write และ std::io::Read ลักษณะหรืออะนาล็อกแบบอะซิงโครนัสของพวกเขาจาก tokio Library: tokio::io::AsyncRead และ tokio::io::AsyncWriteBufferFormatter ที่จัดทำโดยไลบรารีนี้ ส่วนนี้ของ LoggedStream รับผิดชอบในแบบฟอร์มคุณจะเห็นอินพุตและไบต์ไบต์ ปัจจุบันไลบรารีนี้มีการใช้งานต่อไปนี้ของลักษณะ BufferFormatter : LowercaseHexadecimalFormatter , UppercaseHexadecimalFormatter , DecimalFormatter , BinaryFormatter และ OctalFormatter นอกจากนี้ BufferFormatter เป็นลักษณะสาธารณะดังนั้นคุณมีอิสระที่จะสร้างการใช้งานของคุณเองRecordFilter จัดเตรียมโดยไลบรารีนี้ ส่วนนี้ของ LoggedStream รับผิดชอบการกรองบันทึกบันทึก ขณะนี้ไลบรารีนี้มีการใช้งาน RecordFilter TRAIT: DefaultFilter ซึ่งยอมรับบันทึกบันทึกทั้งหมดและ RecordKindFilter ทั้งหมดซึ่งยอมรับบันทึกที่มีชนิดที่ระบุระหว่างการสร้าง นอกจากนี้ RecordFilter เป็นลักษณะสาธารณะและคุณมีอิสระที่จะสร้างการใช้งานของคุณเองLogger ที่จัดทำโดยไลบรารีนี้ ส่วนหนึ่งของ LoggedStream นี้มีหน้าที่รับผิดชอบในการทำงานเพิ่มเติมด้วยบันทึกบันทึกการสร้างและการกรอง ตัวอย่างเช่นสามารถส่งออกไปยังคอนโซลเขียนลงในไฟล์ที่เขียนลงในฐานข้อมูลที่เขียนไปยังหน่วยความจำเพื่อใช้หรือส่งโดยช่อง ปัจจุบันไลบรารีนี้มีการใช้งานลักษณะของ Logger ต่อไปนี้: ConsoleLogger , MemoryStorageLogger , ChannelLogger และ FileLogger นอกจากนี้ Logger ยังเป็นลักษณะสาธารณะและคุณมีอิสระที่จะสร้างการใช้งานของคุณเอง หากต้องการใช้ logged-stream ให้เพิ่มบรรทัดต่อไปนี้ใน Cargo.toml ของคุณ:
[ dependencies ]
logged-stream = " 0.4 "หรือเรียกใช้คำสั่งการขนส่งสินค้าต่อไปนี้ในไดเรกทอรีโครงการของคุณ:
$ cargo add [email protected]
นี่เป็นตัวอย่างการใช้งานง่าย ๆ ของโครงสร้าง LoggedStream ด้วย std::net::TcpStream เป็นวัตถุ IO underling ซึ่งเชื่อมต่อกับเซิร์ฟเวอร์ echo-server, ตัวพิมพ์เล็กรูปแบบ hexadecimal, ตัวกรองเริ่มต้นและตัวบันทึกคอนโซล
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 ( ) ;
}เอาต์พุตไปยังคอนโซล:
[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.
ตัวอย่างเต็มรูปแบบของตัวอย่างนี้สามารถพบได้ที่นั่น
ตัวอย่างเดียวกัน แต่สามารถเขียนใหม่โดยใช้ API แบบอะซิงโครนัสสามารถพบได้ที่นั่น
ได้รับใบอนุญาตภายใต้
ตามตัวเลือกของคุณ
หากคุณไม่ได้ระบุอย่างชัดเจนการบริจาคใด ๆ ที่ส่งโดยเจตนาเพื่อรวมไว้ในงานโดยคุณตามที่กำหนดไว้ในใบอนุญาต Apache-2.0 จะได้รับใบอนุญาตคู่ดังกล่าวข้างต้นโดยไม่มีข้อกำหนดหรือเงื่อนไขเพิ่มเติมใด ๆ