The qlog crate is an implementation of the [qlog main schema] and [qlog QUIC and HTTP/3 events] that attempts to closely follow the format of the qlog [TypeScript schema]. This is just a data model and no support is provided for logging IO, applications can decide themselves the most appropriate method.
The crate uses Serde for conversion between Rust and JSON.
A typical application needs a single qlog trace that it appends QUIC and/or HTTP/3 events to:
```rust let trace = Trace { vantagepoint: VantagePoint { name: "Example client", ty: VantagePointType::Client, flow: None, }, title: Some("Example qlog trace".tostring()), description: Some("Example qlog trace description".tostring()), configuration: Some(Configuration { timeoffset: Some("0".tostring()), timeunits: Some(TimeUnits::Ms), originaluris: None, }), commonfields: None, eventfields: vec![ "relativetime".tostring(), "category".tostring(), "event".tostring(), "data".tostring(), ], events: Vec::new(), };
```
Qlog Events are added to qlog::Trace.events
. Utility method are provided for
the various types of QUIC and HTTP/3 events. The following example demonstrates
how to log a QUIC packet containing a single Crypto frame, it uses the
push_transport_event()
and QuicFrame::crypto()
methods to capture a
PacketSent event and its EventData.
rust
trace.push_transport_event(
"0".to_string(),
TransportEventType::PacketSent,
EventData::PacketSent {
raw_encrypted: None,
raw_decrypted: None,
packet_type: PacketType::Initial,
header: PacketHeader {
packet_number: "0".to_string(),
packet_size: Some(1251),
payload_length: Some(1224),
version: Some("0xff000018".to_string()),
scil: Some("8".to_string()),
dcil: Some("8".to_string()),
scid: Some("7e37e4dcc6682da8".to_string()),
dcid: Some("36ce104eee50101c".to_string()),
},
frames: Some(vec![
QuicFrame::crypto(
"0".to_string(),
"1000".to_string(),
)
]),
is_coalesced: None,
},
);
Simply:
`rust
serde_json::to_string_pretty(&trace).unwrap();
which would generate the following:
{
"vantage_point": {
"name": "Example client",
"type": "client"
},
"title": "Example qlog trace",
"description": "Example qlog trace description",
"configuration": {
"time_units": "ms",
"time_offset": "0"
},
"event_fields": [
"relative_time",
"category",
"event",
"data"
],
"events": [
[
"0",
"transport",
"packet_sent",
{
"packet_type": "initial",
"header": {
"packet_number": "0",
"packet_size": 1251,
"payload_length": 1224,
"version": "0xff000018",
"scil": "8",
"dcil": "8",
"scid": "7e37e4dcc6682da8",
"dcid": "36ce104eee50101c"
},
"frames": [
{
"frame_type": "crypto",
"offset": "0",
"length": "100",
}
]
}
]
]
}