logged stream
v0.4.0
logged-stream std::io::Write :: std::io::Read tokioライブラリからの非同期類似物を実装する根底にあるIOオブジェクトのラッパーとして使用できるLoggedStream構造を提供するRustライブラリです。
LoggedStream構造は4つの部分から構成されています。
std::io::Write std :: io :: read read read tokio Libraryのstd::io::Read :: tokio::io::AsyncRead and tokio::io::AsyncWriteからの基礎となるIOオブジェクト。BufferFormatterフォーマッタの特性を実装する必要があるバッファーフォーマット部品。 LoggedStreamのこの部分は、入力と出力バイトが表示されるフォームに責任があります。現在、このライブラリは、 BufferFormatterの特性の次の実装を提供します: LowercaseHexadecimalFormatter 、 UppercaseHexadecimalFormatter 、 DecimalFormatter 、 BinaryFormatter 、 OctalFormatter 。また、 BufferFormatter公共の特性であるため、独自の実装を自由に構築できます。RecordFilter特性を実装する必要があるフィルタリングパーツ。 LoggedStreamのこの部分は、ログレコードのフィルタリングを担当します。現在、このライブラリは、 RecordFilter特性の次の実装を提供します: DefaultFilterは、コンストラクト中に指定された種類のログを受け入れるすべてのログレコードとRecordKindFilter受け入れます。また、 RecordFilter公共の特性であり、独自の実装を自由に構築できます。Logger特性を実装する必要があるロギングパーツ。 LoggedStreamのこの部分は、構築されたフォーマッタ、フィルター付きのログレコードを使用したさらなる作業を担当しています。たとえば、ファイルに書き込まれ、データベースに書き込まれ、メモリに書き込まれ、さらに使用するか、チャンネルで送信されるコンソールに出力できます。現在、このライブラリは、 ConsoleLogger 、 MemoryStorageLogger 、 ChannelLogger 、 FileLogger Logger特性の次の実装を提供しています。また、 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ライセンスで定義されているように、お客様による仕事に含めるために意図的に提出された貢献は、追加の条件なしで、上記のように二重ライセンスを取得するものとします。