logged-stream -это библиотека ржавчины, которая обеспечивает структуру LoggedStream , которая может использоваться в качестве обертки для основного объекта ввода-вывода, который реализует std::io::Write and std::io::Read черты или их асинхронные аналоги из библиотеки tokio , чтобы включить регистрацию всех операций чтения и записи, ошибок и падения.
Структурные конструкции LoggedStream из четырех частей:
std::io::Write and std::io::Read черты или их асинхронные аналоги из библиотеки tokio : tokio::io::AsyncRead и tokio::io::AsyncWrite .BufferFormatter , предоставленную этой библиотекой. Эта часть LoggedStream отвечает за форму вы увидите входные и выходные байты. В настоящее время OctalFormatter этой библиотеке представлены следующие реализации черты BufferFormatter : LowercaseHexadecimalFormatter , UppercaseHexadecimalFormatter , DecimalFormatter BinaryFormatter . Также BufferFormatter является общедоступной чертой, поэтому вы можете построить свою собственную реализацию.RecordFilter , предоставлена этой библиотекой. Эта часть LoggedStream отвечает за фильтрацию записей журналов. В настоящее время в этой библиотеке представлена следующая реализация черты RecordFilter : DefaultFilter , которая принимает все записи журнала и RecordKindFilter , которая принимает журналы с видами, указанными во время конструкции. Также RecordFilter является публичной чертой, и вы можете построить свою собственную реализацию.Logger предоставленную этой библиотекой. Эта часть LoggedStream отвечает за дальнейшую работу с построенной, форматированием и фильтрованной записью журнала. Например, его можно вывести в консоли, записанный в файл, записанный в базу данных, записанный в память для дальнейшего использования или отправленного каналом. В настоящее время в этой библиотеке представлены следующие реализации черты Logger : ConsoleLogger , MemoryStorageLogger , ChannelLogger и FileLogger . Также Logger является публичной чертой, и вы можете построить свою собственную реализацию. Чтобы использовать logged-stream , добавьте следующую строку в свой Cargo.toml :
[ dependencies ]
logged-stream = " 0.4 "или запустите следующую команду грузоподъемности в каталоге проекта:
$ cargo add [email protected]
Это простой пример использования структуры LoggedStream с std::net::TcpStream в качестве подчиненного объекта 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, должен быть двойной лицензией, как указано выше, без каких-либо дополнительных условий или условий.