logged-stream est une bibliothèque de rouille qui fournit une structure LoggedStream qui peut être utilisée comme un emballage pour l'objet IO sous-jacent qui implémente std::io::Write et std::io::Read des traits ou leurs analogues asynchrones de la bibliothèque tokio pour permettre la connexion de toutes les opérations, erreurs et drop.
Constructions de structures LoggedStream à partir de quatre parties:
std::io::Write et std::io::Read Traits ou leurs analogues asynchrones de tokio Library: tokio::io::AsyncRead et tokio::io::AsyncWrite .BufferFormatter fourni par cette bibliothèque. Cette partie de LoggedStream est responsable du formulaire que vous verrez les octets d'entrée et de sortie. Actuellement, cette bibliothèque fournit les implémentations suivantes de BufferFormatter Trait: LowercaseHexadecimalFormatter , UppercaseHexadecimalFormatter , DecimalFormatter , BinaryFormatter et OctalFormatter . BufferFormatter est également un trait public, vous êtes donc libre de construire votre propre implémentation.RecordFilter fourni par cette bibliothèque. Cette partie de LoggedStream est responsable du filtrage des enregistrements de journal. Actuellement, cette bibliothèque fournit l'implémentation suivante de RecordFilter Trait: DefaultFilter qui accepte tous les enregistrements de journal et RecordKindFilter qui accepte les journaux avec des types spécifiés lors de la construction. RecordFilter également le caractéristique publique et vous êtes libre de construire votre propre implémentation.Logger fourni par cette bibliothèque. Cette partie de LoggedStream est responsable des travaux supplémentaires avec l'enregistrement du journal construit, formateur et filtré. Par exemple, il peut être sorti sur console, écrit dans le fichier, écrit dans la base de données, écrit dans la mémoire pour une utilisation ultérieure ou envoyé par le canal. Actuellement, cette bibliothèque fournit les implémentations suivantes de Logger Trait: ConsoleLogger , MemoryStorageLogger , ChannelLogger et FileLogger . Logger est également un trait public et vous êtes libre de construire votre propre implémentation. Pour utiliser logged-stream , ajoutez la ligne suivante à votre Cargo.toml :
[ dependencies ]
logged-stream = " 0.4 "ou exécutez la commande de fret suivante dans votre répertoire de projet:
$ cargo add [email protected]
Ceci est un exemple d'utilisation simple de la structure LoggedStream avec std::net::TcpStream en tant qu'objet IO souterraine qui se connecte à un écho-serveur, un formateur hexadécimal en minuscules, un filtre par défaut et un enregistreur de console par défaut.
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 ( ) ;
}Sortie à la console:
[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 version complète de cet exemple peut y être trouvée.
Le même exemple, mais réécrit à l'aide d'API asynchrone, peut y être trouvé.
Sous licence sous l'un ou l'autre des
à votre option.
À moins que vous ne soyez explicitement indiqué autrement, toute contribution intentionnellement soumise pour inclusion dans les travaux par vous, telle que définie dans la licence Apache-2.0, doit être autorisée à double licence comme ci-dessus, sans aucune condition supplémentaire.