logged-stream es una biblioteca de óxido que proporciona una estructura LoggedStream que puede usarse como un envoltorio para el objeto IO subyacente que implementa std::io::Write and std::io::Read rasgos o sus análogos asincrónicos de la biblioteca tokio para permitir el registro de todas las operaciones de lectura y escritura, errores y caídas.
LoggedStream Structure Construye a partir de cuatro partes:
std::io::Write y std::io::Read rasgos o sus análogos asíncronos de la biblioteca tokio : tokio::io::AsyncRead y tokio::io::AsyncWrite .BufferFormatter proporcionado por esta biblioteca. Esta parte de LoggedStream es responsable del formulario que verá los bytes de entrada y salida. Actualmente UppercaseHexadecimalFormatter esta biblioteca proporciona OctalFormatter siguientes implementaciones del rasgo de BufferFormatter DecimalFormatter LowercaseHexadecimalFormatter BinaryFormatter . También BufferFormatter es el rasgo público, por lo que es libre de construir su propia implementación.RecordFilter proporcionado por esta biblioteca. Esta parte de LoggedStream es responsable del filtrado de registros de registros. Actualmente, esta biblioteca proporciona la siguiente implementación del rasgo RecordFilter : DefaultFilter que acepta todos los registros de registro y RecordKindFilter que acepta registros con tipos especificados durante la construcción. También RecordFilter es un rasgo público y usted es libre de construir su propia implementación.Logger proporcionado por esta biblioteca. Esta parte de LoggedStream es responsable del trabajo adicional con el registro de registro construido, formatero y filtrado. Por ejemplo, se puede emitir a la consola, escrito en el archivo, escrito en la base de datos, escrita en la memoria para su uso posterior o enviado por el canal. Actualmente, esta biblioteca proporciona las siguientes implementaciones del rasgo Logger : ConsoleLogger , MemoryStorageLogger , ChannelLogger y FileLogger . También Logger es un rasgo público y usted es libre de construir su propia implementación. Para usar logged-stream , agregue la siguiente línea a su Cargo.toml :
[ dependencies ]
logged-stream = " 0.4 "o ejecute el siguiente comando de carga en el directorio de su proyecto:
$ cargo add [email protected]
Este es un ejemplo de uso simple de la estructura LoggedStream con std::net::TcpStream como objeto IO sublacable que se conecta a un formateador hexadecimal en minúsculas, filtro predeterminado y registrador de consola.
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 ( ) ;
}Salida a la consola:
[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.
La versión completa de este ejemplo se puede encontrar allí.
El mismo ejemplo, pero reescrito usando la API asincrónica, se puede encontrar allí.
Con licencia bajo cualquiera de
a tu opción.
A menos que declare explícitamente lo contrario, cualquier contribución presentada intencionalmente para su inclusión en el trabajo por usted, como se define en la licencia Apache-2.0, se debe tener doble licencia como se indicó anteriormente, sin ningún término o condiciones adicionales.