logged-stream إلى المكتبة الصدأ التي توفر بنية LoggedStream التي يمكن استخدامها ككائن IO الأساسي الذي ينفذ std::io::Write و std::io::Read السمات أو نظائرها غير المتزامنة من مكتبة tokio لتمكين تسجيل كل عمليات القراءة والكتابة والقطر.
بنية بنية LoggedStream من أربعة أجزاء:
tokio::io::AsyncRead الأساسي ، الذي يجب tokio ينفذ std::io::Write tokio::io::AsyncWrite std::io::ReadBufferFormatter التي توفرها هذه المكتبة. هذا الجزء من LoggedStream مسؤول عن النموذج سترى بايت الإدخال والمخرجات. توفر هذه المكتبة حاليًا التطبيقات التالية للسمات BufferFormatter : LowercaseHexadecimalFormatter ، UppercaseHexadecimalFormatter ، DecimalFormatter ، BinaryFormatter و OctalFormatter . كما أن BufferFormatter هي سمة عامة ، لذا فأنت حر في بناء تنفيذك الخاص.RecordFilter التي توفرها هذه المكتبة. هذا الجزء من LoggedStream مسؤول عن تصفية سجلات السجل. توفر هذه المكتبة حاليًا التنفيذ التالي لـ RecordFilter STRAIT: DefaultFilter التي تقبل جميع سجلات السجل و RecordKindFilter التي تقبل السجلات مع الأنواع المحددة أثناء البناء. كما أن RecordFilter هي سمة عامة وأنت حر في بناء تطبيقك الخاص.Logger التي توفرها هذه المكتبة. هذا الجزء من LoggedStream مسؤول عن مزيد من العمل مع سجل السجل المبني والمنسق والمرشح. على سبيل المثال ، يمكن إخراجها إلى وحدة التحكم ، مكتوبة إلى الملف ، مكتوبة إلى قاعدة البيانات ، مكتوبة إلى الذاكرة لمزيد من الاستخدام أو إرسال القناة. توفر هذه المكتبة حاليًا التطبيقات التالية لـ Logger Trait: ConsoleLogger و MemoryStorageLogger و ChannelLogger و FileLogger . كما أن Logger هي سمة عامة وأنت حر في بناء تطبيقك الخاص. لاستخدام logged-stream ، أضف السطر التالي إلى Cargo.toml :
[ dependencies ]
logged-stream = " 0.4 "أو قم بتشغيل أمر الشحن التالي في دليل المشروع الخاص بك:
$ cargo add [email protected]
هذا مثال بسيط للاستخدام على بنية LoggedStream مع std::net::TcpStream ككائن IO الأساسي الذي يتصل ببعض خادم الصدى ، والمنسق السداسي السداسي ، ومرشح الافتراضي ومسجل وحدة التحكم.
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.
يمكن العثور على النسخة الكاملة من هذا المثال هناك.
نفس المثال ، ولكن إعادة كتابة باستخدام واجهة برمجة التطبيقات غير المتزامنة ، يمكن العثور عليها هناك.
مرخصة تحت أي من
في خيارك.
ما لم تقل صراحةً خلاف ذلك ، فإن أي مساهمة تم تقديمها عن عمد لإدراجها في العمل بواسطتك ، كما هو محدد في ترخيص Apache-2.0 ، تكون مرخصة مزدوجة على النحو الوارد أعلاه ، دون أي شروط أو شروط إضافية.