logged stream
v0.4.0
logged-stream 은 ROST LIBRASION이 LOST IO 객체를위한 래퍼로 사용할 수있는 LoggedStream 구조를 제공하는 Rust Library입니다. std::io::Write std::io::Read tokio 라이브러리에서 모든 읽기 및 쓰기 작업, 오류 및 드롭의 로깅에 이르기까지 특성 또는 비동기 아날로그를 읽습니다.
네 가지 부분의 LoggedStream 구조 구성 :
std::io::Write 및 std::io::Read tokio Library의 특성 또는 그들의 비동기 아날로그 : tokio::io::AsyncRead 및 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 에 다음 줄을 추가하십시오.
[ dependencies ]
logged-stream = " 0.4 "또는 프로젝트 디렉토리에서 다음화물 명령을 실행하십시오.
$ cargo add [email protected]
이것은 std::net::TcpStream 가진 LoggedStream 구조의 간단한 사용 예입니다.
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 라이센스에 정의 된대로 귀하의 작업에 포함되도록 의도적으로 제출 된 기부금은 추가 이용 약관이나 조건없이 위와 같이 이중 라이센스를받습니다.