logged stream
v0.4.0
logged-stream是一個銹庫,它提供了一個LoggedStream結構,可以用作io對象tokio基礎包裝器,該對象實現了std::io::Write and std::io::Read特質或讀取其異步類似物,以啟用所有讀取和寫入和寫入和寫入和誤差,錯誤,錯誤,錯誤,誤差和刪除。
來自四個部分的LoggedStream結構結構:
std::io::Write and std::io::Read特徵或它們的異步類似物來自tokio庫: tokio::io::AsyncRead and tokio::io::AsyncWrite 。BufferFormatter特徵。 LoggedStream的這一部分負責您將看到輸入和輸出字節的形式。當前,該庫提供了以下BufferFormatter特徵的實現: LowercaseHexadecimalFormatter , UppercaseHexadecimalFormatter ,DemalFormatter, DecimalFormatter , BinaryFormatter和OctalFormatter 。同樣, BufferFormatter是公共特徵,因此您可以自由構建自己的實現。RecordFilter性狀。 LoggedStream的這一部分負責日誌記錄過濾。當前,該庫提供了以下RecordFilter特性的實現: DefaultFilter ,該特性接受所有日誌記錄和RecordKindFilter ,該記錄和recordKindFilter接受構造過程中指定的種類的日誌。 RecordFilter也是公共特徵,您可以自由構建自己的實現。Logger特徵。 LoggedStream的這一部分負責使用構造,格式化和過濾的日誌記錄進行進一步的工作。例如,可以將其輸出到寫入文件的控制台,寫入數據庫,寫在存儲器上以進一步使用或由頻道發送。當前,該庫提供了以下Logger特徵的實現: ConsoleLogger , MemoryStorageLogger , ChannelLogger和FileLogger 。也是Logger是公共特徵,您可以自由構建自己的實現。要使用logged-stream ,請在您的Cargo.toml中添加以下行:toml:
[ dependencies ]
logged-stream = " 0.4 "或在項目目錄中運行以下貨物命令:
$ cargo add [email protected]
這是帶有std::net::TcpStream的LoggedStream結構的簡單用法示例,它是底座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.
可以在此處找到此示例的完整版本。
相同的例子,但是使用異步API重寫,可以在那裡找到。
根據任何一個
可以選擇。
除非您另有明確說明,否則任何有意提交的捐款(如Apache-2.0許可證中定義)應為雙重許可,如上所述,沒有任何其他條款或條件。