logged-stream ist eine Rostbibliothek, die eine LoggedStream Struktur bietet, die als Wrapper für das zugrunde liegende IO-Objekt verwendet werden kann, das std::io::Write und std::io::Read merkmal oder deren asynchronen Analoge aus tokio Bibliothek implementiert werden kann, um die Protokollierung aller Lesen und Schreibvorgänge, Fehler, Fehler, Fehlern, Fehlern, und fallen zu lassen.
LoggedStream Strukturkonstrukte aus vier Teilen:
std::io::Write und std::io::Read Merkmale oder deren asynchronen Analoga aus tokio -Bibliothek lesen muss: tokio::io::AsyncRead und tokio::io::AsyncWrite .BufferFormatter -Merkmale implementieren muss. Dieser Teil des LoggedStream ist für das Formular verantwortlich. Sie werden die Eingangs- und Ausgabe -Bytes angezeigt. Derzeit enthält diese Bibliothek die folgenden Implementierungen des BufferFormatter -Merkmals: LowercaseHexadecimalFormatter , UppercaseHexadecimalFormatter , DecimalFormatter , BinaryFormatter und OctalFormatter . Auch BufferFormatter ist das öffentliche Merkmal, sodass Sie Ihre eigene Implementierung frei erstellen können.RecordFilter -Merkmal in dieser Bibliothek implementiert werden muss. Dieser Teil des LoggedStream ist für die Filterung der Protokolldatensätze verantwortlich. Derzeit enthält diese Bibliothek die folgende Implementierung des RecordFilter -Merkmals: DefaultFilter , das alle Protokolldatensätze und RecordKindFilter akzeptiert, die Protokolle mit Arten akzeptiert, die während des Konstrukts angegeben sind. Außerdem ist RecordFilter das öffentliche Merkmal und Sie können Ihre eigene Implementierung konstruieren.Logger -Merkmale implementieren muss. Dieser Teil des LoggedStream ist für die weitere Arbeit mit konstruierten, Formatierungs- und Filterprotokolldatensätzen verantwortlich. Zum Beispiel kann es an die Konsole ausgegeben, in die Datei geschrieben, in die Datenbank geschriebene, in den Speicher geschriebene oder vom Kanal gesendete in den Speicher geschrieben werden. Derzeit enthält diese Bibliothek die folgenden Implementierungen des Logger -Merkmals: ConsoleLogger , MemoryStorageLogger , ChannelLogger und FileLogger . Auch Logger ist das öffentliche Merkmal und Sie können Ihre eigene Implementierung konstruieren. Um logged-stream zu verwenden, fügen Sie der folgenden Zeile Ihrer Cargo.toml hinzu.
[ dependencies ]
logged-stream = " 0.4 "Oder führen Sie den folgenden Frachtbefehl in Ihrem Projektverzeichnis aus:
$ cargo add [email protected]
Dies ist ein einfaches Verwendungsbeispiel für eine LoggedStream Struktur mit std::net::TcpStream als Unterblind-IO-Objekt, das mit einem Echo-Server, einem hexadezimalen Formatierer in Kleinbuchstaben, einem Standardfilter und einem Konsolenprotokoll verbunden ist.
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 ( ) ;
}Ausgabe zur Konsole:
[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.
Vollversion dieses Beispiels finden Sie dort.
Das gleiche Beispiel, aber mit asynchroner API neu geschrieben, finden Sie dort.
Lizenziert unter einem von
nach Ihrer Option.
Sofern Sie nicht ausdrücklich anders angeben, ist ein Beitrag, der absichtlich zur Aufnahme in die Arbeit von Ihnen eingereicht wird, wie in der Apache-2.0-Lizenz definiert, ohne zusätzliche Bedingungen doppelt lizenziert wie oben.