<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.17 (Ruby 3.0.2) -->
<?rfc docindent="yes"?>
<?rfc strict="yes"?>
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-quic-qlog-main-schema-15" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.14.2 -->
  <front>
    <title abbrev="qlog">qlog: Structured Logging for Network Protocols</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-main-schema-15"/>
    <author initials="R." surname="Marx" fullname="Robin Marx" role="editor">
      <organization>Akamai</organization>
      <address>
        <email>rmarx@akamai.com</email>
      </address>
    </author>
    <author initials="L." surname="Niccolini" fullname="Luca Niccolini" role="editor">
      <organization>Meta</organization>
      <address>
        <email>lniccolini@meta.com</email>
      </address>
    </author>
    <author initials="M." surname="Seemann" fullname="Marten Seemann" role="editor">
      <organization/>
      <address>
        <email>martenseemann@gmail.com</email>
      </address>
    </author>
    <author initials="L." surname="Pardue" fullname="Lucas Pardue" role="editor">
      <organization>Apple</organization>
      <address>
        <email>lucas@lucaspardue.com</email>
      </address>
    </author>
    <date year="2026" month="November" day="02"/>
    <area>Transport</area>
    <workgroup>QUIC</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>qlog provides extensible structured logging for network protocols, allowing for
easy sharing of data that benefits common debug and analysis methods and
tooling. This document describes key concepts of qlog: formats, files, traces,
events, and extension points. This definition includes the high-level log file
schemas, and generic event schemas. Requirements and guidelines for creating
protocol-specific event schemas are also presented. All schemas are defined
independent of serialization format, allowing logs to be represented in various
ways such as JSON, CSV, or protobuf.</t>
    </abstract>
    <note>
      <name>Note to Readers</name>
      <ul empty="true">
        <li>
          <t>Note to RFC editor: Please remove this section before publication.</t>
        </li>
      </ul>
      <t>Feedback and discussion are welcome at
<eref target="https://github.com/quicwg/qlog">https://github.com/quicwg/qlog</eref>. Readers are
advised to refer to the "editor's draft" at that URL for an up-to-date version
of this document.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>Endpoint logging is a useful strategy for capturing and understanding how
applications using network protocols are behaving, particularly where protocols
have an encrypted wire image that restricts observers' ability to see what is
happening.</t>
      <t>Many applications implement logging using a custom, non-standard logging format.
This has an effect on the tools and methods that are used to
analyze the logs, for example to perform root cause analysis of an
interoperability failure between distinct implementations. A lack of a common
format impedes the development of common tooling that can be used by all parties
that have access to logs.</t>
      <t>qlog is an extensible structured logging for network protocols that allows for
easy sharing of data that benefits common debug and analysis methods and
tooling. This document describes key concepts of qlog: formats, files, traces,
events, and extension points. This definition includes the high-level log file
schemas, and generic event schemas. Requirements and guidelines for creating
protocol-specific event schemas are also presented. Accompanying documents
define event schemas for QUIC (<xref target="QLOG-QUIC"/>) and HTTP/3 (<xref target="QLOG-H3"/>).</t>
      <t>The goal of qlog is to provide amenities and default characteristics that each
logging file should contain (or should be able to contain), such that generic
and reusable toolsets can be created that can deal with logs from a variety of
different protocols and use cases.</t>
      <t>As such, qlog provides versioning, metadata inclusion, log aggregation, event
grouping and log file size reduction techniques.</t>
      <t>All qlog schemas can be serialized in many ways (e.g., JSON, CBOR, protobuf,
etc). This document describes only how to employ JSON <xref target="RFC8259"/>, its subset
I-JSON <xref target="RFC7493"/>, and its streamable derivative JSON Text Sequences
<xref target="RFC7464"/>.</t>
      <section anchor="conventions-and-terminology">
        <name>Conventions and Terminology</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <t>Serialization examples in this document use JSON (<xref target="RFC8259"/>) unless
otherwise indicated.</t>
        <t>Events are defined with an importance level as described in <xref target="importance"/>.</t>
      </section>
      <section anchor="use-of-cddl">
        <name>Use of CDDL</name>
        <t>To define events and data structures, all qlog documents use the Concise Data
Definition Language <xref target="CDDL"/>. This document uses the basic syntax, the
specific <tt>text</tt>, <tt>uint</tt>, <tt>float32</tt>, <tt>float64</tt>, <tt>bool</tt>, and <tt>any</tt> types, as well
as the <tt>.size</tt> and <tt>.regexp</tt> control operators, the <tt>~</tt> unwrapping
operator, and the <tt>$</tt> and <tt>$$</tt> extension points syntax from <xref target="CDDL"/>.</t>
        <t>Additionally, this document defines the following custom types for
clarity:</t>
        <figure anchor="cddl-custom-types-def">
          <name>Additional CDDL type definitions</name>
          <sourcecode type="cddl"><![CDATA[
; CDDL's uint is defined as being 64-bit in size
; but for many protocol fields it is better to be restrictive
; and explicit
uint8 = uint .size 1
uint16 = uint .size 2
uint32 = uint .size 4
uint64 = uint .size 8

; an even-length lowercase string of hexadecimally encoded bytes
; examples: 82dc, 027339, 4cdbfd9bf0
; this is needed because the default CDDL binary string (bytes/bstr)
; is only CBOR and not JSON compatible
hexstring = text .regexp "([0-9a-f]{2})*"
]]></sourcecode>
        </figure>
        <t>All timestamps and time-related values (e.g., offsets) in qlog are
logged as <tt>float64</tt> in the millisecond resolution.</t>
        <t>Other qlog documents can define their own CDDL-compatible (struct) types
(e.g., separately for each Packet type that a protocol supports).</t>
        <t>The ordering of member fields in qlog CDDL type definitions is not significant.
The ordering of member fields in the serialization formats defined in this
document, JSON (<xref target="format-json"/>) and JSON Text Sequences (<xref target="format-json-seq"/>),
is also not significant, and qlog tools <bcp14>MUST NOT</bcp14> depend on it. Other qlog
serialization formats <bcp14>MAY</bcp14> define field order as significant; if they do, they
<bcp14>MUST</bcp14> define requirements for qlog tools supporting those formats.</t>
        <ul empty="true">
          <li>
            <t>Note to RFC editor: Please remove the following text in this section before
publication.</t>
          </li>
        </ul>
        <t>The main general CDDL syntax conventions in this document a reader
should be aware of for easy reading comprehension are:</t>
        <ul spacing="normal">
          <li>
            <tt>? obj</tt> : this object is optional</li>
          <li>
            <tt>TypeName1 / TypeName2</tt> : a union of these two types (object can be either type 1 OR
type 2)</li>
          <li>
            <tt>obj: TypeName</tt> : this object has this concrete type</li>
          <li>
            <tt>obj: [* TypeName]</tt> : this object is an array of this type with
minimum size of 0 elements</li>
          <li>
            <tt>obj: [+ TypeName]</tt> : this object is an array of this type with
minimum size of 1 element</li>
          <li>
            <tt>TypeName = ...</tt> : defines a new type</li>
          <li>
            <tt>EnumName = "entry1" / "entry2" / entry3 / ...</tt>: defines an enum</li>
          <li>
            <tt>StructName = { ... }</tt> : defines a new struct type</li>
          <li>
            <tt>;</tt> : single-line comment</li>
          <li>
            <tt>* text =&gt; any</tt> : special syntax to indicate 0 or more fields that
have a string key that maps to any value. Used to indicate a generic
JSON object.</li>
        </ul>
      </section>
    </section>
    <section anchor="design-overview">
      <name>Design Overview</name>
      <t>The main tenets for the qlog design are:</t>
      <ul spacing="normal">
        <li>Streamable, event-based logging</li>
        <li>A flexible format that can reduce log producer overhead, at the cost of
increased complexity for consumers (e.g. tools)</li>
        <li>Extensible and pragmatic</li>
        <li>Aggregation and transformation friendly (e.g., the top-level element
for the non-streaming format is a container for individual traces,
group_ids can be used to tag events to a particular context)</li>
        <li>Metadata is stored together with event data</li>
      </ul>
      <t>This is achieved by a logical logging hierarchy of:</t>
      <ul spacing="normal">
        <li>
          <t>Log file
          </t>
          <ul spacing="normal">
            <li>
              <t>Trace(s)
              </t>
              <ul spacing="normal">
                <li>Event(s)</li>
              </ul>
            </li>
          </ul>
        </li>
      </ul>
      <t>An abstract LogFile class is declared (<xref target="abstract-logfile"/>), from which all
concrete log file formats derive using log file schemas. This document defines
the QlogFile (<xref target="qlog-file-schema"/>) and QlogFileSeq (<xref target="qlog-file-seq-schema"/>)
log file schemas.</t>
      <t>A trace is conceptually fluid but the conventional use case is to group events
related to a single data flow, such as a single logical QUIC connection, at a
single vantage point (<xref target="vantage-point"/>). Concrete trace definitions relate to
the log file schemas they are contained in; see (<xref target="traces"/>, <xref target="trace"/>, and
<xref target="traceseq"/>).</t>
      <t>Events are logged at a time instant and convey specific details of the logging
use case. For example, a network packet being sent or received. This document
declares an abstract Event class (<xref target="abstract-event"/>) containing fields common
to all events, which all concrete events derive from. Concrete events are
defined by event schemas that declare or extend a namespace, which contains one
or more related event types or their extensions. For example, this document
defines two event schemas for two generic event namespaces <tt>loglevel</tt> and
<tt>simulation</tt> (see <xref target="generic-event-schema"/>).</t>
      <section anchor="default-values">
        <name>Default Values</name>
        <t>Log files, traces, and events can have optional fields. The definition of an
optional field can give it a default value. If the field is omitted in a logged event, it has that
default value, unless <tt>common_fields</tt> (<xref target="common-fields"/>) sets it. Logging the
default value explicitly means the same as omitting the field.</t>
        <t>If an optional field has no default value, omitting it implies nothing about its
value.</t>
        <t>The rules for default values can be overridden by definitions, for example by saying
that an omitted field keeps its value from an earlier event.</t>
      </section>
    </section>
    <section anchor="abstract-logfile">
      <name>Abstract LogFile Class</name>
      <t>A Log file is intended to contain a collection of events that are in some way
related. An abstract LogFile class containing fields common to all log files is
defined in <xref target="abstract-logfile-def"/>. Each concrete log file schema derives from
this using the CDDL unwrap operator (~) and can extend it by defining semantics
and any custom fields.</t>
      <figure anchor="abstract-logfile-def">
        <name>LogFile definition</name>
        <sourcecode type="cddl"><![CDATA[
LogFile = {
    file_schema: text
    serialization_format: text
    ? title: text
    ? description: text
}
]]></sourcecode>
      </figure>
      <t>The required <tt>file_schema</tt> field identifies the concrete log file schema. It
<bcp14>MUST</bcp14> have a value that is an absolute URI; see <xref target="schema-uri"/> for rules and
guidance.</t>
      <t>The required <tt>serialization_format</tt> field indicates the serialization
format using a media type <xref target="RFC2046"/>. It is case-insensitive.</t>
      <t>In order to make it easier to parse and identify qlog files and their
serialization format, the <tt>file_schema</tt> and <tt>serialization_format</tt> fields and
their values <bcp14>SHOULD</bcp14> be in the first 256 characters/bytes of the resulting log
file.</t>
      <t>The optional <tt>title</tt> and <tt>description</tt> fields provide additional free-text
information about the file.</t>
      <section anchor="schema-uri">
        <name>Concrete Log File Schema URIs</name>
        <t>Concrete log file schemas <bcp14>MUST</bcp14> identify themselves using a URI <xref target="RFC3986"/>.</t>
        <t>Log file schemas defined by RFCs <bcp14>MUST</bcp14> register a URI in the "qlog log file
schema URIs" registry and <bcp14>SHOULD</bcp14> use a URN of the form
<tt>urn:ietf:params:qlog:file:&lt;schema-identifier&gt;</tt>, where <tt>&lt;schema-identifier&gt;</tt> is
a globally-unique text name using only characters in the URI unreserved range;
see <xref section="2.3" sectionFormat="of" target="RFC3986"/>. This document registers
<tt>urn:ietf:params:qlog:file:contained</tt> (<xref target="qlog-file-schema"/>) and
<tt>urn:ietf:params:qlog:file:sequential</tt> (<xref target="qlog-file-seq-schema"/>).</t>
        <t>Private or non-standard log file schemas <bcp14>MAY</bcp14> register a URI in the "qlog log
file schema URIs" registry but <bcp14>MUST NOT</bcp14> use a URN of the form
<tt>urn:ietf:params:qlog:file:&lt;schema-identifier&gt;</tt>. URIs that contain a domain name
<bcp14>SHOULD</bcp14> also contain a month-date in the form mmyyyy. For example,
"https://example.org/072024/globallyuniquelogfileschema". The definition of the
log file schema and assignment of the URI <bcp14>MUST</bcp14> have been authorized by the owner
of the domain name on or very close to that date. This avoids problems when
domain names change ownership. The URI does not need to be dereferenceable,
allowing for confidential use or to cover the case where the log file schema
continues to be used after the organization that defined it ceases to exist.</t>
        <t>The "qlog log file schema URIs" registry operates under the Expert Review
policy, per <xref section="4.5" sectionFormat="of" target="RFC8126"/>.  When reviewing requests, the expert
<bcp14>MUST</bcp14> check that the URI is appropriate to the concrete log file schema and
satisfies the requirements in this section. A request to register a private or
non-standard log file schema URI using a URN of the form
<tt>urn:ietf:params:qlog:file:&lt;schema-identifier&gt;</tt> <bcp14>MUST</bcp14> be rejected.</t>
        <t>Registration requests should use the template defined in <xref target="iana"/>.</t>
      </section>
    </section>
    <section anchor="qlog-file-schema">
      <name>QlogFile Schema</name>
      <t>A qlog file using the QlogFile schema can contain several individual traces and
logs from multiple vantage points that are in some way related. The top-level
element in this schema defines only a small set of "header" fields and an array
of component traces. This is defined in <xref target="qlog-file-def"/> as:</t>
      <figure anchor="qlog-file-def">
        <name>QlogFile definition</name>
        <sourcecode type="cddl"><![CDATA[
QlogFile = {
    ~LogFile
    ? traces: [+ Trace /
                TraceError]
}
]]></sourcecode>
      </figure>
      <t>The QlogFile schema URI is <tt>urn:ietf:params:qlog:file:contained</tt>.</t>
      <t>QlogFile extends LogFile using the CDDL unwrap operator (~), which copies the
fields presented in <xref target="abstract-logfile"/>. Additionally, the optional <tt>traces</tt>
field contains an array of qlog traces (<xref target="trace"/>) or trace errors
(<xref target="trace-error"/>). Each trace contains metadata and an array of qlog events
(<xref target="abstract-event"/>).</t>
      <t>This document defines a JSON serialization for QlogFile; see <xref target="format-json"/> for
guidance on populating the <tt>serialization_format</tt> field and other
considerations. Where a qlog file is serialized to a JSON format, one of the
downsides is that it is inherently a non-streamable format. Put differently, it
is not possible to simply append new qlog events to a log file without "closing"
this file at the end by appending "]}]}". Without these closing brackets, most
JSON parsers will be unable to parse the file entirely. The alternative
QlogFileSeq (<xref target="qlog-file-seq-schema"/>) is better suited to streaming use cases.</t>
      <t>JSON serialization example:</t>
      <figure anchor="qlog-file-ex">
        <name>QlogFile example</name>
        <artwork><![CDATA[
{
    "file_schema": "urn:ietf:params:qlog:file:contained",
    "serialization_format": "application/qlog+json",
    "title": "Name of this particular qlog file (short)",
    "description": "Description for this group of traces (long)",
    "traces": [...]
}
]]></artwork>
      </figure>
      <section anchor="traces">
        <name>Traces</name>
        <t>It can be useful to group several related qlog traces in a single file. For
example, logging can happen simultaneously on the client, on the server, and at
a point on their common network path. Combining these three traces in one file
makes them easier to analyze, store, transfer, and annotate as a set.</t>
        <t>The QlogFile <tt>traces</tt> field is an array that contains a list of individual qlog
traces. When capturing a qlog at a vantage point, it is expected that the traces
field contains a single entry. Files can be aggregated, for example as part of a
post-processing operation, by copying the traces from the component files into
the combined <tt>traces</tt> array of a new, aggregated qlog file.</t>
        <t>Note that another way to combine events of different traces in a single qlog
file is through the use of the <tt>group_id</tt> field, discussed in <xref target="group-ids"/>.</t>
      </section>
      <section anchor="trace">
        <name>Trace</name>
        <t>The exact conceptual definition of a Trace can be fluid. For example, a trace
could contain all events for a single connection, for a single endpoint, for a
single measurement interval, for a single protocol, etc. In the normal use case
however, a trace is a log of a single data flow collected at a single location
or vantage point. For example, for QUIC, a single trace typically contains
events for a single logical QUIC connection for either the client or the server.</t>
        <t>A Trace contains some metadata in addition to qlog events, defined in
<xref target="trace-def"/> as:</t>
        <figure anchor="trace-def">
          <name>Trace definition</name>
          <sourcecode type="cddl"><![CDATA[
Trace = {
    ? title: text
    ? description: text
    ? common_fields: CommonFields
    ? vantage_point: VantagePoint
    event_schemas: [+text]
    events: [* Event]
}
]]></sourcecode>
        </figure>
        <t>The optional <tt>title</tt> and <tt>description</tt> fields provide additional free-text
information about the trace.</t>
        <t>The optional <tt>common_fields</tt> field is described in <xref target="common-fields"/>.</t>
        <t>The optional <tt>vantage_point</tt> field is described in <xref target="vantage-point"/>.</t>
        <t>The required <tt>event_schemas</tt> field contains event schema URIs that identify
concrete event namespaces and their associated types recorded in the <tt>events</tt>
field. Requirements and guidelines are defined in <xref target="event-types-and-schema"/>.</t>
        <t>The semantics and context of the trace can mainly be deduced from the entries in
the <tt>common_fields</tt> list and <tt>vantage_point</tt> field.</t>
        <t>JSON serialization example:</t>
        <figure anchor="trace-ex">
          <name>Trace example</name>
          <artwork><![CDATA[
{
    "title": "Name of this particular trace (short)",
    "description": "Description for this trace (long)",
    "common_fields": {
        "odcid": "abcde1234",
        "time_format": "relative_to_epoch",
        "reference_time": {
            "clock_type": "system",
            "epoch": "1970-01-01T00:00:00.000Z"
        }
    },
    "vantage_point": {
        "name": "backend-67",
        "type": "server"
    },
    "event_schemas": ["urn:ietf:params:qlog:events:quic"],
    "events": [...]
}
]]></artwork>
        </figure>
      </section>
      <section anchor="trace-error">
        <name>TraceError</name>
        <t>A TraceError indicates that an attempt to find/convert a file for inclusion in
the aggregated qlog was made, but there was an error during the process. Rather
than silently dropping the erroneous file, it can be explicitly included in the
qlog file as an entry in the <tt>traces</tt> array, defined in <xref target="trace-error-def"/> as:</t>
        <figure anchor="trace-error-def">
          <name>TraceError definition</name>
          <sourcecode type="cddl"><![CDATA[
TraceError = {
    error_description: text

    ; the original URI used in the attempt to find the file
    ? uri: text
    ? vantage_point: VantagePoint
}
]]></sourcecode>
        </figure>
        <t>JSON serialization example:</t>
        <figure anchor="trace-error-ex">
          <name>TraceError example</name>
          <artwork><![CDATA[
{
    "error_description": "File could not be found",
    "uri": "/srv/traces/today/latest.qlog",
    "vantage_point": { "type": "server" }
}
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="qlog-file-seq-schema">
      <name>QlogFileSeq Schema</name>
      <t>A qlog file using the QlogFileSeq schema can be serialized to a streamable JSON
format called JSON Text Sequences (JSON-SEQ) (<xref target="RFC7464"/>). The top-level
element in this schema defines only a small set of "header" fields and a single
component trace. This is defined in <xref target="qlog-file-seq-def"/> as:</t>
      <figure anchor="qlog-file-seq-def">
        <name>QlogFileSeq definition</name>
        <sourcecode type="cddl"><![CDATA[
QlogFileSeq = {
    ~LogFile
    trace: TraceSeq
}
]]></sourcecode>
      </figure>
      <t>The QlogFileSeq schema URI is <tt>urn:ietf:params:qlog:file:sequential</tt>.</t>
      <t>QlogFileSeq extends LogFile using the CDDL unwrap operator (~), which copies the
fields presented in <xref target="abstract-logfile"/>. Additionally, the required <tt>trace</tt>
field contains a single TraceSeq (<xref target="traceseq"/>), which all qlog events in the
file are related to.</t>
      <t>See <xref target="format-json-seq"/> for guidance on populating the <tt>serialization_format</tt>
field and other serialization considerations.</t>
      <t>JSON-SEQ serialization example, showing a QlogFileSeq header record followed
by qlog event records. Each record starts with a Record Separator character,
shown as &lt;RS&gt;, and ends with a newline; see <xref target="RFC7464"/>.</t>
      <figure anchor="json-seq-ex">
        <name>QlogFileSeq example</name>
        <artwork><![CDATA[
<RS>{
    "file_schema": "urn:ietf:params:qlog:file:sequential",
    "serialization_format": "application/qlog+json-seq",
    "title": "Name of JSON Text Sequence qlog file (short)",
    "description": "Description for this trace file (long)",
    "trace": {
      "common_fields": {
        "group_id":"127ecc830d98f9d54a42c4f0842aa87e181a",
        "time_format": "relative_to_epoch",
        "reference_time": {
            "clock_type": "system",
            "epoch": "1970-01-01T00:00:00.000Z"
        }
      },
      "vantage_point": {
        "name":"backend-67",
        "type":"server"
      },
      "event_schemas": ["urn:ietf:params:qlog:events:quic",
                        "urn:ietf:params:qlog:events:http3"]
    }
}
<RS>{"time": 2, "name": "quic:parameters_set", "data": { ... } }
<RS>{"time": 7, "name": "quic:packet_sent", "data": { ... } }
...
]]></artwork>
      </figure>
      <section anchor="traceseq">
        <name>TraceSeq</name>
        <t>TraceSeq is used with QlogFileSeq. It is conceptually similar to a Trace, with
the exception that qlog events are not contained within it, but rather appended
after it in a QlogFileSeq.</t>
        <figure anchor="trace-seq-def">
          <name>TraceSeq definition</name>
          <sourcecode type="cddl"><![CDATA[
TraceSeq = {
    ? title: text
    ? description: text
    ? common_fields: CommonFields
    ? vantage_point: VantagePoint
    event_schemas: [+text]
}
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="vantage-point">
      <name>VantagePoint</name>
      <t>A VantagePoint describes the vantage point from which a trace originates,
defined in <xref target="vantage-point-def"/> as:</t>
      <figure anchor="vantage-point-def">
        <name>VantagePoint definition</name>
        <sourcecode type="cddl"><![CDATA[
VantagePoint = {
    ? name: text
    type: VantagePointType
    ? flow: VantagePointFlow
}

; client = endpoint which initiates the connection
; server = endpoint which accepts the connection
; network = observer in between client and server
VantagePointType = "client" /
                   "server" /
                   "network" /
                   "unknown"

; client = vantage point follows client data flow semantics
;          (a "packet sent" event goes towards the server)
; server = vantage point follows server data flow semantics
;          (a "packet sent" event goes towards the client)
; unknown = the flow's direction is unknown
VantagePointFlow = "client" /
                   "server" /
                   "unknown"
]]></sourcecode>
      </figure>
      <t>JSON serialization examples:</t>
      <figure anchor="vantage-point-ex">
        <name>VantagePoint example</name>
        <artwork><![CDATA[
{
    "name": "aioquic client",
    "type": "client"
}

{
    "name": "wireshark trace",
    "type": "network",
    "flow": "client"
}
]]></artwork>
      </figure>
      <t>The <tt>flow</tt> field is only required if the type is "network" (for example, the
trace is generated from a packet capture). It is used to disambiguate events
like "packet sent" and "packet received". This is indicated explicitly because
for multiple reasons (e.g., privacy) data from which the flow direction can be
otherwise inferred (e.g., IP addresses) might not be present in the logs.</t>
      <t>Meaning of the different values for the <tt>flow</tt> field:</t>
      <ul spacing="normal">
        <li>"client" indicates that this vantage point follows client data flow semantics (a
"packet sent" event goes in the direction of the server).</li>
        <li>"server" indicates that this vantage point follows server data flow semantics (a
"packet sent" event goes in the direction of the client).</li>
        <li>"unknown" indicates that the flow's direction is unknown.</li>
      </ul>
      <t>Depending on the context, tools confronted with "unknown" values in the
vantage_point can either try to heuristically infer the semantics from
protocol-level domain knowledge (e.g., in QUIC, the client always sends the
first packet) or give the user the option to switch between client and server
perspectives manually.</t>
    </section>
    <section anchor="abstract-event">
      <name>Abstract Event Class</name>
      <t>Events are logged at a time instant and convey specific details of the logging
use case. An abstract Event class containing fields common to all events is
defined in <xref target="event-def"/>.</t>
      <figure anchor="event-def">
        <name>Event definition</name>
        <sourcecode type="cddl"><![CDATA[
Event = {
    time: float64
    name: text
    data: $ProtocolEventData
    ? tuple: TupleID
    ? time_format: TimeFormat
    ? group_id: GroupID
    ? system_info: SystemInformation

    ; events can contain any amount of custom fields
    * text => any
}
]]></sourcecode>
      </figure>
      <t>Each qlog event <bcp14>MUST</bcp14> contain the mandatory fields: <tt>time</tt>
(<xref target="time-based-fields"/>), <tt>name</tt> (<xref target="event-types-and-schema"/>), and <tt>data</tt>
(<xref target="data-field"/>).</t>
      <t>Each qlog event is an instance of a concrete event type that derives from the
abstract Event class; see <xref target="event-types-and-schema"/>. They extend it by defining
the specific values and semantics of the fields common to all events, in
particular the <tt>name</tt> and <tt>data</tt> fields. Furthermore, they can optionally add
custom fields.</t>
      <t>Each qlog event <bcp14>MAY</bcp14> contain the optional fields: <tt>time_format</tt>
(<xref target="time-based-fields"/>), <tt>tuple</tt> (<xref target="tuple-field"/>), <tt>group_id</tt>
(<xref target="group-ids"/>), and <tt>system_info</tt> (<xref target="system-info"/>).</t>
      <t>Multiple events can appear in a Trace or TraceSeq and they might contain fields
with identical values. It is possible to optimize out this duplication using
<tt>common_fields</tt> (<xref target="common-fields"/>).</t>
      <t>Example qlog event:</t>
      <figure anchor="event-ex">
        <name>Event example</name>
        <artwork><![CDATA[
{
    "time": 1553986553572,

    "name": "quic:packet_sent",
    "data": { ... },

    "group_id": "127ecc830d98f9d54a42c4f0842aa87e181a",

    "time_format": "relative_to_epoch",

    "odcid": "127ecc830d98f9d54a42c4f0842aa87e181a"
}
]]></artwork>
      </figure>
      <section anchor="time-based-fields">
        <name>Timestamps</name>
        <t>The <tt>time</tt> field indicates when the event occurred. It is a duration measured
from some point in time; its units depend on the type of clock chosen and system
used. The <tt>time</tt> field is a float64 and it is typically used to represent a
duration in milliseconds, with a fractional component to microsecond or
nanosecond resolution.</t>
        <t>There are several options for generating and logging timestamps, these are
governed by the ReferenceTime type (optionally included in the <tt>reference_time</tt>
field contained in a trace's <tt>common_fields</tt> (<xref target="common-fields"/>)) and TimeFormat
type (optionally included in the <tt>time_format</tt> field contained in the event
itself, or a trace's <tt>common_fields</tt>).</t>
        <t>There is no requirement that events in the same trace use the same time format.
However, using a single time format for related events can make them easier to
analyze.</t>
        <t>The reference time governs from which point in time the <tt>time</tt> field values are
measured and is defined as:</t>
        <figure anchor="reference-time-def">
          <name>ReferenceTime definition</name>
          <sourcecode type="cddl"><![CDATA[
ReferenceTime = {
    clock_type: "system" / "monotonic" / text
    epoch: RFC3339DateTime / "unknown"

    ? wall_clock_time: RFC3339DateTime
}

RFC3339DateTime = text
]]></sourcecode>
        </figure>
        <t>The required <tt>clock_type</tt> field represents the type of clock used for time
measurements. The value "system" represents a clock that uses system time,
commonly measured against a chosen or well-known epoch. However, depending on
the system, system time can potentially jump forward or back. In contrast, a
clock using monotonic time is generally guaranteed to never go backwards. The
value "monotonic" represents such a clock.</t>
        <t>The required <tt>epoch</tt> field is the start of the ReferenceTime. When using the
"system" clock type, the <tt>epoch</tt> field <bcp14>SHOULD</bcp14> have a date/time value using the
format defined in <xref target="RFC3339"/>. However, the value "unknown" <bcp14>MAY</bcp14> be used.</t>
        <t>When using the "monotonic" clock type, the <tt>epoch</tt> field <bcp14>MUST</bcp14> have the value
"unknown".</t>
        <t>The optional <tt>wall_clock_time</tt> field can be used to provide an approximate
date/time value that logging commenced at if the epoch value is "unknown". It
uses the format defined in <xref target="RFC3339"/>. Note that conversion of timestamps to
calendar time based on wall clock times cannot be safely relied on.</t>
        <t>The time format details how <tt>time</tt> values are encoded relative to the reference
time and is defined as:</t>
        <figure anchor="time-format-def">
          <name>TimeFormat definition</name>
          <sourcecode type="cddl"><![CDATA[
TimeFormat = "relative_to_epoch" /
             "relative_to_previous_event"
]]></sourcecode>
        </figure>
        <dl>
          <dt>relative_to_epoch:</dt>
          <dd>
            <t>A duration relative to the ReferenceTime <tt>epoch</tt> field. This approach produces
the largest values. It is suitable for stateless loggers. The <tt>time_format</tt>
field defaults to this value.</t>
          </dd>
          <dt>relative_to_previous_event:</dt>
          <dd>
            <t>A delta-encoded value: the duration since the time of the previously logged
event. The first event in a trace is always relative to the ReferenceTime.
This approach produces the smallest values. It is suitable for stateful
loggers.</t>
          </dd>
        </dl>
        <t>Events in each individual trace <bcp14>SHOULD</bcp14> be logged in time order, so that no event
has an earlier time than the event logged before it. With the
"relative_to_previous_event" format, this means that no logged <tt>time</tt> value is
negative. Loggers could choose to log events out of order for reasons such as
supporting multi-threaded or streaming implementations.</t>
        <t>Tools cannot rely on logs containing traces with events in time order. A qlog
trace can be sorted, for example, as a post-processing step by the logger, or a
pre-processing step for a tool.</t>
        <t>Several events can have the same time, for example when one received packet
leads to several events, or when the clock has a low resolution. The logged
order of these events can still matter, for example to show a packet before the
events it caused. A stable sort, which keeps events with the same time in their
logged order, preserves it.</t>
        <t>Tools <bcp14>SHOULD NOT</bcp14> assume the ability to derive the absolute calendar timestamp of
an event from qlog traces. Tools should not rely on timestamps to be consistent
across traces, even those generated by the same logging endpoint. For reasons of
privacy, the reference time <bcp14>MAY</bcp14> have minimization or anonymization applied.</t>
        <t>Example of a log using the relative_to_epoch format:</t>
        <figure anchor="rel-epoch-time-ex">
          <name>Relative to epoch timestamps</name>
          <artwork><![CDATA[
"common_fields": {
    "time_format": "relative_to_epoch",
    "reference_time": {
          "clock_type": "system",
          "epoch": "1970-01-01T00:00:00.000Z"
    }
},
"events": [
  {
    "time": 1553986553572,
    "name": "quic:packet_received",
    "data": { ... }
  },
  {
    "time": 1553986553577,
    "name": "quic:packet_received",
    "data": { ... }
  },
  {
    "time": 1553986553587,
    "name": "quic:packet_received",
    "data": { ... }
  },
  {
    "time": 1553986553597,
    "name": "quic:packet_received",
    "data": { ... }
  }
]
]]></artwork>
        </figure>
        <t>Example of a log using the relative_to_previous_event format:</t>
        <figure anchor="rel-last-event-time-ex">
          <name>Relative-to-previous-event timestamps</name>
          <artwork><![CDATA[
"common_fields": {
    "time_format": "relative_to_previous_event",
    "reference_time": {
          "clock_type": "system",
          "epoch": "1970-01-01T00:00:00.000Z"
    }
},
"events": [
  {
    "time": 1553986553572,
    "name": "quic:packet_received",
    "data": { ... }
  },
  {
    "time": 5,
    "name": "quic:packet_received",
    "data": { ... }
  },
  {
    "time": 10,
    "name": "quic:packet_received",
    "data": { ... }
  },
  {
    "time": 10,
    "name": "quic:packet_received",
    "data": { ... }
  }
]
]]></artwork>
        </figure>
        <t>Example of a monotonic log using the relative_to_epoch format:</t>
        <figure anchor="mono-time-ex">
          <name>Monotonic timestamps</name>
          <artwork><![CDATA[
"common_fields": {
    "time_format": "relative_to_epoch",
    "reference_time": {
          "clock_type": "monotonic",
          "epoch": "unknown",
          "wall_clock_time": "2024-10-10T10:10:10.000Z"
    }
},
"events": [
  {
    "time": 0,
    "name": "quic:packet_received",
    "data": { ... }
  },
  {
    "time": 5,
    "name": "quic:packet_received",
    "data": { ... }
  },
  {
    "time": 15,
    "name": "quic:packet_received",
    "data": { ... }
  },
  {
    "time": 25,
    "name": "quic:packet_received",
    "data": { ... }
  }
]
]]></artwork>
        </figure>
      </section>
      <section anchor="tuple-field">
        <name>Tuple</name>
        <t>A qlog event is typically associated with a single network "path", which is
usually aligned with a four-tuple of IP addresses and ports. The optional
<tt>tuple</tt> field (of type TupleID) identifies a single network four-tuple and can
be used to associate individual events with a specific "path".</t>
        <t>Definition:</t>
        <figure anchor="tuple-def">
          <name>TupleID definition</name>
          <sourcecode type="cddl"><![CDATA[
TupleID = text
]]></sourcecode>
        </figure>
        <t>The <tt>tuple</tt> field defaults to "".</t>
        <t>Because tuple definitions can depend and vary based on the underlying protocols
and mechanisms used, this document intentionally does not define further how to
choose this identifier's value per tuple or how to log other parameters that can
be associated with such a tuple. This is expected to be defined by extension
schemas that want to use the <tt>tuple</tt> field. Implementers are for example free to
encode or serialize tuple information directly into the TupleID's contents or to
log associated info in a separate event. For example, QUIC has the
<tt>tuple_assigned</tt> event to couple the TupleID contents to a specific tuple
configuration, see <xref section="4.7" sectionFormat="of" target="QLOG-QUIC"/>.</t>
        <t>The <tt>tuple</tt> field is intentionally marked as optional, as there can be many
practical or logical reasons why implementations might not want to log it for
every event. For example, the TupleID contents will usually be the same for all
events in a single connection and bears no repeating. Similarly, application
level protocols will typically not care which tuple a specific frame is
sent/received on.</t>
        <t>However, in some situations, such as during QUIC's Connection Migration or when
a transport protocol can use multiple paths, it is useful to be able to split
events across multiple (concurrent) tuples and/or paths, especially for
packet-level events. Even in those cases however, it is allowed to log the
<tt>tuple</tt> field only for some events in the trace when salient (for example only
when QUIC PATH_CHALLENGE and PATH_RESPONSE frames are involved, or when the
first packet on a new path is sent/received) and omit it when not.</t>
      </section>
      <section anchor="group-ids">
        <name>Grouping</name>
        <t>As discussed in <xref target="traces"/>, a single qlog file can contain several traces taken
from different vantage points. However, a single trace from one endpoint can also
contain events from a variety of sources. For example, a server implementation
might choose to log events for all incoming connections in a single large
(streamed) qlog file. As such, a method for splitting up events belonging
to separate logical entities is required.</t>
        <t>The simplest way to perform this splitting is by associating a "group id" to
each event that indicates to which conceptual "group" each event belongs. A
post-processing step can then extract events per group. However, this group
identifier can be highly protocol and context-specific. In the example above,
the QUIC "Original Destination Connection ID" could be used to uniquely identify
a connection. As such, the server implementation might add an <tt>odcid</tt> field to
each event.
Additionally, a service providing different levels of Quality of Service (QoS)
to their users might wish to group connections per QoS level applied. They might
instead prefer a <tt>qos</tt> field.</t>
        <t>As such, to provide consistency and ease of tooling in cross-protocol and
cross-context setups, qlog instead defines the common <tt>group_id</tt> field, which
contains a string value. Implementations are free to use their preferred string
serialization for this field, so long as it contains a unique value per logical
group. Some examples can be seen in <xref target="group-id-ex"/>.</t>
        <figure anchor="group-id-def">
          <name>GroupID definition</name>
          <sourcecode type="cddl"><![CDATA[
GroupID = text
]]></sourcecode>
        </figure>
        <t>JSON serialization example for events grouped either by QUIC Connection IDs, or
according to an endpoint-specific Quality of Service (QoS) logic that includes
the service level:</t>
        <figure anchor="group-id-ex">
          <name>GroupID example</name>
          <artwork><![CDATA[
"events": [
    {
        "time": 1553986553579,
        "group_id": "qos=premium",
        "name": "quic:packet_received",
        "data": { ... }
    },
    {
        "time": 1553986553581,
        "group_id": "127ecc830d98f9d54a42c4f0842aa87e181a",
        "name": "quic:packet_sent",
        "data": { ... }
    }
]
]]></artwork>
        </figure>
        <t>Note that in some contexts (for example a transport protocol that can use
multiple paths) it might make sense to add additional contextual per-event
fields (for example TupleID, see <xref target="tuple-field"/>), rather than use the group_id
field for that purpose.</t>
        <t>Note also that, typically, a single trace only contains events belonging to a
single logical group (for example, an individual QUIC connection). As such,
instead of logging the <tt>group_id</tt> field with an identical value for each event
instance, this field is typically logged once in <tt>common_fields</tt>, see
<xref target="common-fields"/>.</t>
      </section>
      <section anchor="system-info">
        <name>SystemInformation</name>
        <t>The <tt>system_info</tt> field can be used to record system-specific details related to
an event. This is useful, for instance, where an application splits work across
CPUs, processes, or threads and events for a single trace occur on potentially
different combinations thereof. Each field is optional to support deployment
diversity.</t>
        <figure anchor="system-info-def">
          <name>SystemInformation definition</name>
          <sourcecode type="cddl"><![CDATA[
SystemInformation = {
    ? processor_id: uint32
    ? process_id: uint32
    ? thread_id: uint32
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="common-fields">
        <name>CommonFields</name>
        <t>As discussed in the previous sections, information for a typical qlog event
varies in three main fields: <tt>time</tt>, <tt>name</tt> and associated data. Additionally,
there are also several more advanced fields that allow mixing events from
different protocols and contexts inside of the same trace (for example
<tt>group_id</tt>). In most "normal" use cases however, the values of these advanced
fields are consistent for each event instance (for example, a single trace
contains events for a single QUIC connection).</t>
        <t>To reduce file size and make logging easier, qlog uses the <tt>common_fields</tt> list
to indicate those fields and their values that are shared by all events in this
component trace. This prevents these fields from being logged for each individual
event. An example of this is shown in <xref target="common-fields-ex"/>.</t>
        <figure anchor="common-fields-ex">
          <name>CommonFields example</name>
          <artwork><![CDATA[
JSON serialization with repeated field values
per-event instance:

{
    "events": [{
            "group_id": "127ecc830d98f9d54a42c4f0842aa87e181a",
            "time_format": "relative_to_epoch",
            "reference_time": {
              "clock_type": "system",
              "epoch": "2019-03-29T22:55:53.572Z"
            },

            "time": 2,
            "name": "quic:packet_received",
            "data": { ... }
        },{
            "group_id": "127ecc830d98f9d54a42c4f0842aa87e181a",
            "time_format": "relative_to_epoch",
            "reference_time": {
              "clock_type": "system",
              "epoch": "2019-03-29T22:55:53.572Z"
            },

            "time": 7,
            "name": "http3:frame_parsed",
            "data": { ... }
        }
    ]
}

JSON serialization with repeated field values instead
extracted to common_fields:

{
    "common_fields": {
        "group_id": "127ecc830d98f9d54a42c4f0842aa87e181a",
        "time_format": "relative_to_epoch",
        "reference_time": {
            "clock_type": "system",
            "epoch": "2019-03-29T22:55:53.572Z"
        }
    },
    "events": [
        {
            "time": 2,
            "name": "quic:packet_received",
            "data": { ... }
        },{
            "time": 7,
            "name": "http3:frame_parsed",
            "data": { ... }
        }
    ]
}
]]></artwork>
        </figure>
        <t>The <tt>common_fields</tt> field is a generic dictionary of key-value pairs, where the
key is always a string and the value can be of any type, but is typically also a
string or number. As such, unknown entries in this dictionary <bcp14>MUST</bcp14> be disregarded
by the user and tools (i.e., the presence of an unknown field is explicitly NOT an
error).</t>
        <t>The list of default qlog fields that are typically logged in common_fields (as
opposed to as individual fields per event instance) are shown in the listing
below:</t>
        <figure anchor="common-fields-def">
          <name>CommonFields definition</name>
          <sourcecode type="cddl"><![CDATA[
CommonFields = {
    ? tuple: TupleID
    ? time_format: TimeFormat
    ? reference_time: ReferenceTime
    ? group_id: GroupID
    * text => any
}
]]></sourcecode>
        </figure>
        <t>Tools <bcp14>MUST</bcp14> be able to deal with these fields being defined either on each event
individually or combined in common_fields. Note that if at least one event in a
trace has a different value for a given field, this field <bcp14>MUST NOT</bcp14> be added to
common_fields but instead defined on each event individually. Good examples of such
fields are <tt>time</tt> and <tt>data</tt>, which are divergent by nature.</t>
      </section>
    </section>
    <section anchor="event-types-and-schema">
      <name>Concrete Event Types and Event Schemas</name>
      <t>Concrete event types, as well as related data types, are grouped in event
namespaces which in turn are defined in one or multiple event schemas.</t>
      <t>As an example, the <tt>QUICPacketSent</tt> and <tt>PacketHeader</tt> event and data types
would be part of the <tt>quic</tt> namespace, which is defined in an event schema with
URI <tt>urn:ietf:params:qlog:events:quic</tt>. A later extension that adds a new QUIC
frame <tt>QUICNewFrame</tt> would also be part of the <tt>quic</tt> namespace, but defined in
a new event schema with URI
<tt>urn:ietf:params:qlog:events:quic#new-frame-extension</tt>. Similarly, the first
document that defines qlog events for a new hypothetical protocol called "IPoAC"
would define and register both the new event namespace <tt>ipoac</tt> and the event
schema URI <tt>urn:ietf:params:qlog:events:ipoac</tt>.</t>
      <t>Concrete event types <bcp14>MUST</bcp14> belong to a single event namespace and <bcp14>MUST</bcp14> have a
non-empty identifier of type <tt>text</tt>.</t>
      <t>New namespaces <bcp14>MUST</bcp14> have a non-empty globally-unique text identifier using only
characters in the URI unreserved range; see <xref section="2.3" sectionFormat="of" target="RFC3986"/>.
Namespaces are mutable and <bcp14>MAY</bcp14> be extended with new events.</t>
      <t>The value of a qlog event <tt>name</tt> field <bcp14>MUST</bcp14> be the concatenation of namespace
identifier, colon (':'), and event type identifier (for example:
quic:packet_sent). The resulting concatenation <bcp14>MUST</bcp14> be globally unique, so log
files can contain events from multiple event schemas without the risk of name
collisions. The designated expert checks this for the event types listed in
the registry; see <xref target="event-schema-reg"/>. A (private or non-standard) event schema that does not list its
event types there cannot rely on its event names being unique.</t>
      <t>A single event schema contains exactly one of the following:</t>
      <ul spacing="normal">
        <li>A definition for a new event namespace</li>
        <li>An extension of an existing namespace (adding new events/data types and/or
extending existing events/data types within the namespace with new fields)</li>
      </ul>
      <t>A single document can define multiple event schemas. For example, this document
defines the <tt>loglevel</tt> and <tt>simulation</tt> event schemas; see <xref target="loglevel-events"/>
and <xref target="sim-events"/> respectively.</t>
      <t>An event schema <bcp14>MUST</bcp14> have a single URI <xref target="RFC3986"/> that <bcp14>MUST</bcp14> be absolute. The
URI <bcp14>MUST</bcp14> include the namespace identifier. Event schemas that extend an existing
namespace <bcp14>MUST</bcp14> furthermore include a non-empty "extension" identifier that is
unique within the namespace. The extension identifier is a URI fragment
(characters after a "#" in the URI) using only characters in the URI unreserved
range; see <xref section="2.3" sectionFormat="of" target="RFC3986"/>.
Registration guidance and requirements for event schema URIs are provided in
<xref target="event-schema-reg"/>. Event schemas by themselves are immutable once defined and
<bcp14>MUST NOT</bcp14> be extended.</t>
      <t>Implementations that record concrete event types <bcp14>SHOULD</bcp14> list all event schemas
in use in a specific trace. This is achieved by including the appropriate URIs
in the <tt>event_schemas</tt> field of the Trace (<xref target="trace"/>) and TraceSeq
(<xref target="traceseq"/>) types. The <tt>event_schemas</tt> field is a hint to tools about which
event namespaces, extensions, event types, and data types a trace might contain.
The trace <bcp14>MAY</bcp14> still contain event types that do not belong to a listed event
schema. Conversely, not all event types associated with an event schema listed
in <tt>event_schemas</tt> are guaranteed to be logged in a qlog trace. Tools <bcp14>MUST NOT</bcp14>
treat either of these as an error; see <xref target="tooling"/>.</t>
      <t>In the following hypothetical example, a qlog trace contains events belonging to:</t>
      <ul spacing="normal">
        <li>The two event namespaces defined by event schemas in this document
(<xref target="generic-event-schema"/>).</li>
        <li>Events in a namespace named <tt>rick</tt> specified in a hypothetical RFC</li>
        <li>Extensions to the <tt>rick</tt> namespace defined in two separate new event schemas
(with URI extension identifiers <tt>astley</tt> and <tt>moranis</tt>)</li>
        <li>Events from three private event schemas, detailing definitions for and
extensions to two namespaces (<tt>pickle</tt> and <tt>cucumber</tt>)</li>
      </ul>
      <t>The standardized schema URIs use a URN format; the private schemas use a URI
with a domain name.</t>
      <figure anchor="event-schemas">
        <name>Example event_schemas serialization</name>
        <artwork><![CDATA[
"event_schemas": [
  "urn:ietf:params:qlog:events:loglevel",
  "urn:ietf:params:qlog:events:simulation",
  "urn:ietf:params:qlog:events:rick",
  "urn:ietf:params:qlog:events:rick#astley",
  "urn:ietf:params:qlog:events:rick#moranis",
  "https://example.com/032024/pickle.html",
  "https://example.com/032024/pickle.html#lilly",
  "https://example.com/032025/cucumber.html"
]
]]></artwork>
      </figure>
      <section anchor="event-schema-reg">
        <name>Event Schema URIs</name>
        <t>Event schemas defined by RFCs <bcp14>MUST</bcp14> register all namespaces and concrete event
types they contain in the "qlog event schema URIs" registry.</t>
        <t>If an event schema defined by an RFC defines a new namespace, it <bcp14>SHOULD</bcp14> use a
URN of the form <tt>urn:ietf:params:qlog:events:&lt;namespace identifier&gt;</tt>, where
<tt>&lt;namespace identifier&gt;</tt> is globally unique. For example, the <tt>loglevel</tt> event
schema uses <tt>urn:ietf:params:qlog:events:loglevel</tt>.</t>
        <t>If an event schema defined by an RFC extends an existing namespace, it <bcp14>SHOULD</bcp14>
use a URN of the form
<tt>urn:ietf:params:qlog:events:&lt;namespace identifier&gt;#&lt;extension identifier&gt;</tt>,
where the combination of <tt>&lt;namespace identifier&gt;</tt> and <tt>&lt;extension identifier&gt;</tt>
is globally unique.</t>
        <t>Private or non-standard event schemas <bcp14>MAY</bcp14> be registered in the "qlog event
schema URIs" registry but <bcp14>MUST NOT</bcp14> use a URN of the forms outlined above. URIs
that contain a domain name <bcp14>SHOULD</bcp14> also contain a month-date in the form mmyyyy.
For example, "https://example.org/072024/customeventschema#customextension". The
definition of the event schema and assignment of the URI <bcp14>MUST</bcp14> have been
authorized by the owner of the domain name on or very close to that date. This
avoids problems when domain names change ownership. The URI does not need to be
dereferenceable, allowing for confidential use or to cover the case where the
event schemas continue to be used after the organization that defined them
ceases to exist.</t>
        <t>The "qlog event schema URIs" registry operates under the Expert Review policy,
per <xref section="4.5" sectionFormat="of" target="RFC8126"/>.  When reviewing requests, the expert <bcp14>MUST</bcp14> check
that the URI is appropriate to the event schema and satisfies the requirements
in <xref target="event-types-and-schema"/> and this section. A request to register a private
or non-standard schema URI using a URN of the forms reserved for schemas defined
by an RFC above <bcp14>MUST</bcp14> be rejected.</t>
        <t>Registration requests should use the template defined in <xref target="iana"/>.</t>
      </section>
      <section anchor="data-field">
        <name>Extending the Data Field</name>
        <t>An event's <tt>data</tt> field is a generic key-value map (e.g., JSON object). It
defines the per-event metadata that is to be logged. Its specific subfields and
their semantics are defined per concrete event type. For example, data field
definitions for QUIC and HTTP/3 can be found in <xref target="QLOG-QUIC"/> and <xref target="QLOG-H3"/>.</t>
        <t>To keep qlog fully extensible, data fields are defined using two kinds of CDDL
extension point, called "sockets", which other definitions extend with "plugs";
see <xref section="3.9" sectionFormat="of" target="CDDL"/>.</t>
        <t>Firstly, a "group socket" allows existing event data definitions to be extended,
for example with a field needed for a new protocol feature. An event data
definition includes the socket as an entry of the form
<tt>* $$NAMESPACE-EVENTTYPE-extension</tt>. Other event schemas add fields to it with
plugs that use the <tt>//=</tt> operator, and several plugs can extend the same socket.
An example is shown in <xref target="groupsocket-extension-example"/>.</t>
        <figure anchor="groupsocket-extension-example">
          <name>Example of using a generic CDDL group socket to extend an existing event data definition</name>
          <artwork><![CDATA[
; original definition in event schema A
MyNSEventX = {
    field_a: uint8

    * $$myns-eventx-extension
}

; later extension of EventX in event schema B
$$myns-eventx-extension //= (
  ? additional_field_b: bool
)

; another extension of EventX in event schema C
$$myns-eventx-extension //= (
  ? additional_field_c: text
)

; if schemas A, B and C are then used in conjunction,
; the combined MyNSEventX CDDL is equivalent to this:
MyNSEventX = {
    field_a: uint8

    ? additional_field_b: bool
    ? additional_field_c: text
}
]]></artwork>
        </figure>
        <t>Secondly, a "type socket" allows documents to define entirely new event data
definitions. The type of the <tt>data</tt> field in the qlog Event type (see
<xref target="event-def"/>) is the type socket <tt>$ProtocolEventData</tt>, which acts as an open
enum of the types allowed for the <tt>data</tt> field. Each new event data definition
is its own CDDL type, added to <tt>$ProtocolEventData</tt> with a plug that uses the
<tt>/=</tt> operator. Any generic key-value map type can be added this way. The example
in <xref target="protocoleventdata-def"/> shows <tt>$ProtocolEventData</tt> extended with two types.</t>
        <figure anchor="protocoleventdata-def">
          <name>ProtocolEventData extension</name>
          <artwork><![CDATA[
; We define two new concrete events in a new event schema
MyNSEvent1 = {
    field_1: uint8

    * $$myns-event1-extension
}

MyNSEvent2 = {
    field_2: bool

    * $$myns-event2-extension
}

; the events are both merged with the existing
; $ProtocolEventData type enum
$ProtocolEventData /= MyNSEvent1 / MyNSEvent2

; the "data" field of a qlog event can now also be of type
; MyNSEvent1 and MyNSEvent2
]]></artwork>
        </figure>
        <t>Event schemas defining new qlog events <bcp14>MUST</bcp14> properly extend <tt>$ProtocolEventData</tt>
when defining data fields to enable automated validation of aggregated qlog
schemas. Furthermore, they <bcp14>SHOULD</bcp14> add a <tt>* $$NAMESPACE-EVENTTYPE-extension</tt>
extension field to newly defined event data to allow the new events to be
properly extended by other event schemas.</t>
        <t>A combined but purely illustrative example of the use of both extension points
for a conceptual QUIC <tt>packet_sent</tt> event is shown in <xref target="data-ex"/>:</t>
        <figure anchor="data-ex">
          <name>Example of an extended 'data' field for a conceptual QUIC packet_sent event</name>
          <artwork><![CDATA[
; defined in the main QUIC event schema
QUICPacketSent = {
    header: PacketHeader
    ? frames: [* $QuicFrame]
    ? raw: RawInfo

    * $$quic-packetsent-extension
}

; Add the event to the global list of recognized qlog events
$ProtocolEventData /= QUICPacketSent

; Defined in a separate event schema that describes a
; theoretical QUIC protocol extension
$$quic-packetsent-extension //= (
  ? additional_field: bool
)

; If both schemas are utilized at the same time,
; the following JSON serialization would pass an automated
; CDDL schema validation check:

{
  "time": 123456,
  "name": "quic:packet_sent",
  "data": {
      "header": {
          "packet_type": "1RTT",
          "packet_number": 123
      },
      "frames": [
          {
              "frame_type": "stream",
              "stream_id": 0,
              "offset": 456
          },
          {
              "frame_type": "padding"
          }
      ],
      "raw": {
          "length": 1280
      },
      "additional_field": true
  }
}
]]></artwork>
        </figure>
        <section anchor="trigger-field">
          <name>Triggers</name>
          <t>It can be useful to understand the cause or trigger of an event. Sometimes,
events are caused by a variety of other events and additional information is
needed to identify the exact details. Commonly, the context of the surrounding
log messages gives a hint about the cause. However, in highly-parallel and
optimized implementations, corresponding log messages might be separated in
time, making it difficult to build an accurate context.</t>
          <t>Including a <tt>trigger</tt> as part of the event itself is one method for providing
fine-grained information without much additional overhead. In circumstances
where a trigger is useful, it is <bcp14>RECOMMENDED</bcp14> for the purpose of consistency that
the event data definition contains an optional field named <tt>trigger</tt>, holding a
string value.</t>
          <t>For example, the QUIC <tt>packet_dropped</tt> event (<xref section="5.7" sectionFormat="of" target="QLOG-QUIC"/>)
includes a trigger field that identifies the general reason category for
dropping a QUIC packet. <xref target="trigger-ex"/> shows this field; the event's other
fields are omitted for clarity.</t>
          <figure anchor="trigger-ex">
            <name>Trigger example</name>
            <artwork><![CDATA[
QUICPacketDropped = {
    ...
    ? trigger:
        "internal_error" /
        "rejected" /
        "unsupported" /
        "invalid" /
        "duplicate" /
        "connection_unknown" /
        "decryption_failure" /
        "keys_unavailable" /
        "general"
    ...
}
]]></artwork>
          </figure>
        </section>
      </section>
      <section anchor="importance">
        <name>Event Importance Levels</name>
        <t>Depending on how events are designed, it may be that several events allow the
logging of similar or overlapping data. For example the separate QUIC
<tt>connection_started</tt> event overlaps with the more generic
<tt>connection_state_updated</tt>. In these cases, it is not always clear which event
should be logged or used, and which event should take precedence if, for
example, both are present and provide conflicting information.</t>
        <t>To aid in this decision making, qlog defines three event importance levels, in
decreasing order of importance and expected usage:</t>
        <ul spacing="normal">
          <li>Core</li>
          <li>Base</li>
          <li>Extra</li>
        </ul>
        <t>Concrete event types <bcp14>SHOULD</bcp14> define an importance level.</t>
        <t>Core-level events <bcp14>SHOULD</bcp14> be present in all qlog files for a given protocol.
These are typically tied to basic packet and frame parsing and creation, as well
as listing basic internal metrics. Tool implementers <bcp14>SHOULD</bcp14> expect and add
support for these events, though <bcp14>SHOULD NOT</bcp14> expect all Core events to be present
in each qlog trace.</t>
        <t>Base-level events add additional debugging options and <bcp14>MAY</bcp14> be present in qlog
files. Most of these can be implicitly inferred from data in Core events (if
those contain all their properties), but for many it is better to log the events
explicitly as well, making it clearer how the implementation behaves. These
events are for example tied to passing data around in buffers, to how internal
state machines change, and used to help show when decisions are actually made
based on received data. Tool implementers <bcp14>SHOULD</bcp14> at least add support for
showing the contents of these events, if they do not handle them explicitly.</t>
        <t>Extra-level events are considered mostly useful for low-level debugging of the
implementation, rather than the protocol. They allow more fine-grained tracking
of internal behavior. As such, they <bcp14>MAY</bcp14> be present in qlog files and tool
implementers <bcp14>MAY</bcp14> add support for these, but they are not required to.</t>
        <t>Implementers might choose not to log some details in Core-level events, such as
data content, for performance or privacy reasons (see <xref target="privacy"/>). In that
case, they <bcp14>SHOULD</bcp14> log relevant Base-level events instead, so that the qlog
output remains usable. For example, a QUIC implementation can omit the details
of STREAM frames from its <tt>packet_received</tt> events and log
<tt>stream_state_updated</tt> events instead.</t>
        <t>Finally, for event types whose data (partially) overlap with other event types'
definitions, where necessary the document defining them should include explicit
guidance on which to use in specific situations.</t>
      </section>
      <section anchor="on-the-wire">
        <name>Relationship to On-the-Wire Data</name>
        <t>Events reflect the view of the implementation that logs them. This can differ
from what was sent or received on the wire, for example because of a bug.</t>
        <t>Event schemas assume a correct implementation when they let one logged value
imply another, or when they leave out data that the wire already shows. For
example, the QUIC <tt>packet_sent</tt> event does not log the encryption level, because
the packet type implies it <xref target="QLOG-QUIC"/>.</t>
      </section>
      <section anchor="tooling-expectations">
        <name>Tooling Expectations</name>
        <t>qlog is an extensible format and it is expected that new event schemas will
emerge that define new namespaces, event types, event fields (e.g., a field
indicating an event's privacy properties), as well as values for the <tt>trigger</tt>
property within the <tt>data</tt> field, or other member fields of the <tt>data</tt> field, as
they see fit.</t>
        <t>It <bcp14>SHOULD NOT</bcp14> be expected that general-purpose tools will recognize or visualize
all forms of qlog extension. Tools <bcp14>SHOULD</bcp14> allow for the presence of unknown
event fields and make an effort to visualize even unknown data if possible,
otherwise they <bcp14>MUST</bcp14> ignore it.</t>
      </section>
      <section anchor="further-design-guidance">
        <name>Further Design Guidance</name>
        <t>There are several ways of defining concrete event types. In practice, two main
approaches have been observed. In the first, event types map directly to
protocol concepts (e.g., <tt>packet_sent</tt>). In the second, event types aggregate
data from several protocol behaviors or code paths (e.g., <tt>parameters_set</tt>).
Aggregation keeps the number of definitions manageable, as a separate definition
for every protocol behavior would cause an explosion of event types.</t>
        <t>Event schemas also avoid duplicate data as much as possible. For example, QUIC
packet header values that stay the same across many packets have their own
events, logged only when a value changes (e.g., <tt>spin_bit_updated</tt> or
<tt>connection_id_updated</tt>).</t>
        <t>Finally, many state changes can be inferred from data on the wire (e.g., flow
control limit changes). Event schemas typically do not define events for these,
because the data on the wire already reveals the change; see <xref target="on-the-wire"/>.
Exceptions have been made for common events that benefit from being easy to
identify or log individually (e.g., <tt>packets_acked</tt>).</t>
      </section>
    </section>
    <section anchor="generic-event-schema">
      <name>The Generic Event Schemas</name>
      <t>The two following generic event schemas define two namespaces and several
concrete event types that are common across protocols, applications, and use
cases.</t>
      <section anchor="loglevel-events">
        <name>Loglevel Events</name>
        <t>In typical logging setups, users utilize a discrete number of well-defined
logging categories, levels or severities to log freeform (string) data. The
loglevel event namespace replicates this approach to allow implementations to
fully replace their existing text-based logging by qlog. This is done by
providing events to log generic strings for the typical well-known logging
levels (error, warning, info, debug, verbose). The namespace identifier is
"loglevel". The event schema URI is <tt>urn:ietf:params:qlog:events:loglevel</tt>.</t>
        <figure anchor="loglevel-events-def">
          <name>LogLevelEventData and ProtocolEventData extension</name>
          <sourcecode type="cddl"><![CDATA[
LogLevelEventData = LogLevelError /
                    LogLevelWarning /
                    LogLevelInfo /
                    LogLevelDebug /
                    LogLevelVerbose

$ProtocolEventData /= LogLevelEventData
]]></sourcecode>
        </figure>
        <t>The event types are further defined below, their identifier is the heading name.</t>
        <section anchor="error">
          <name>error</name>
          <t>Used to log details of an internal error that might not get reflected on the
wire. It has Core importance level.</t>
          <figure anchor="loglevel-error-def">
            <name>LogLevelError definition</name>
            <sourcecode type="cddl"><![CDATA[
LogLevelError = {
    ? code: uint64
    ? message: text

    * $$loglevel-error-extension
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="warning">
          <name>warning</name>
          <t>Used to log details of an internal warning that might not get reflected on the
wire. It has Base importance level.</t>
          <figure anchor="loglevel-warning-def">
            <name>LogLevelWarning definition</name>
            <sourcecode type="cddl"><![CDATA[
LogLevelWarning = {
    ? code: uint64
    ? message: text

    * $$loglevel-warning-extension
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="info">
          <name>info</name>
          <t>Used mainly for implementations that want to use qlog as their one and only
logging format but still want to support unstructured string messages. The event
has Extra importance level.</t>
          <figure anchor="loglevel-info-def">
            <name>LogLevelInfo definition</name>
            <sourcecode type="cddl"><![CDATA[
LogLevelInfo = {
    message: text

    * $$loglevel-info-extension
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="debug">
          <name>debug</name>
          <t>Used mainly for implementations that want to use qlog as their one and only
logging format but still want to support unstructured string messages. The event
has Extra importance level.</t>
          <figure anchor="loglevel-debug-def">
            <name>LogLevelDebug definition</name>
            <sourcecode type="cddl"><![CDATA[
LogLevelDebug = {
    message: text

    * $$loglevel-debug-extension
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="verbose">
          <name>verbose</name>
          <t>Used mainly for implementations that want to use qlog as their one and only
logging format but still want to support unstructured string messages. The event
has Extra importance level.</t>
          <figure anchor="loglevel-verbose-def">
            <name>LogLevelVerbose definition</name>
            <sourcecode type="cddl"><![CDATA[
LogLevelVerbose = {
    message: text

    * $$loglevel-verbose-extension
}
]]></sourcecode>
          </figure>
        </section>
      </section>
      <section anchor="sim-events">
        <name>Simulation Events</name>
        <t>When evaluating a protocol implementation, one typically sets up a series of
interoperability or benchmarking tests, in which the test situations can change
over time. For example, the network bandwidth or latency can vary during the
test, or the network can be fully disabled for a short time. In these setups, it
is useful to know when exactly these conditions are triggered, to allow for
proper correlation with other events. This namespace defines event types to
allow logging of such simulation metadata and its identifier is "simulation".
The event schema URI is <tt>urn:ietf:params:qlog:events:simulation</tt>.</t>
        <figure anchor="sim-events-def">
          <name>SimulationEventData and ProtocolEventData extension</name>
          <sourcecode type="cddl"><![CDATA[
SimulationEventData = SimulationScenario /
                SimulationMarker

$ProtocolEventData /= SimulationEventData
]]></sourcecode>
        </figure>
        <t>The event types are further defined below, their identifier is the heading name.</t>
        <section anchor="scenario">
          <name>scenario</name>
          <t>Used to specify which specific scenario is being tested at this particular
instance. This supports, for example, aggregation of several simulations into
one trace (e.g., split by <tt>group_id</tt>). It has Extra importance level.</t>
          <figure anchor="simulation-scenario-def">
            <name>SimulationScenario definition</name>
            <sourcecode type="cddl"><![CDATA[
SimulationScenario = {
    ? name: text
    ? details: {* text => any }

    * $$simulation-scenario-extension
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="marker">
          <name>marker</name>
          <t>Used to indicate when specific test conditions are triggered at set times
(e.g., at 3 seconds, 2% packet loss is introduced; at 10 seconds, a NAT
rebinding is triggered). It has Extra importance level.</t>
          <figure anchor="simulation-marker-def">
            <name>SimulationMarker definition</name>
            <sourcecode type="cddl"><![CDATA[
SimulationMarker = {
    ? type: text
    ? message: text

    * $$simulation-marker-extension
}
]]></sourcecode>
          </figure>
        </section>
      </section>
    </section>
    <section anchor="raw-info">
      <name>Raw Packet and Frame Information</name>
      <t>While qlog is a high-level logging format, it also allows the inclusion of most
raw wire image information, such as byte lengths and byte values. This is useful
when for example investigating or tuning packetization behavior or determining
encoding/framing overheads. However, these fields are not always necessary, can
take up considerable space, and can have a considerable privacy and security
impact (see <xref target="privacy"/>). Where applicable, these fields are grouped in a
separate, optional, field named <tt>raw</tt> of type RawInfo. The exact definition of
entities, headers, trailers and payloads depends on the protocol used.</t>
      <figure anchor="raw-info-def">
        <name>RawInfo definition</name>
        <sourcecode type="cddl"><![CDATA[
RawInfo = {

    ; the full byte length of the entity (e.g., packet or frame),
    ; including possible headers and trailers
    ? length: uint64

    ; the byte length of the entity's payload,
    ; excluding possible headers or trailers
    ? payload_length: uint64

    ; the (potentially truncated) contents of the full entity,
    ; including headers and possibly trailers
    ? data: hexstring
}
]]></sourcecode>
      </figure>
      <t>All fields in RawInfo are defined as optional. It is acceptable to log any field
without the others. Logging length related fields and omitting the <tt>data</tt> field
permits protocol debugging without the risk of logging potentially sensitive
data. The <tt>data</tt> field, if logged, is not required to contain the contents of a
full entity and can be truncated, see <xref target="truncated-values"/>. The length fields,
if logged, should indicate the actual lengths as defined above, even if the
data field is omitted or truncated.</t>
      <t>Protocol entities containing an on-the-wire length field (for example a packet
header or QUIC's stream frame) are strongly recommended to re-use the
<tt>raw.length</tt> field instead of defining a separate length field, to maintain
consistency and prevent data duplication.</t>
      <t>This document does not specify explicit header_length or trailer_length fields.
In protocols without trailers, header_length can be calculated by subtracting
the payload_length from the length. In protocols with trailers (e.g., QUIC's
AEAD tag), documents that define event schemas <bcp14>SHOULD</bcp14> specify how to support
header_length calculation.</t>
    </section>
    <section anchor="concrete-formats">
      <name>Serializing qlog</name>
      <t>qlog schema definitions in this document are intentionally agnostic to
serialization formats. The choice of format is an implementation decision.</t>
      <t>Other documents related to qlog (for example event definitions for specific
protocols), <bcp14>SHOULD</bcp14> be similarly agnostic to the employed serialization format
and <bcp14>SHOULD</bcp14> clearly indicate this. If not, they <bcp14>MUST</bcp14> include an explanation on
which serialization formats are supported and on how to employ them correctly.</t>
      <t>Serialization formats make certain tradeoffs between usability, flexibility,
interoperability, and efficiency. Implementations should take these into
consideration when choosing a format. Some examples of possible formats are
JSON, CBOR, CSV, protocol buffers, flatbuffers, etc. which each have their own
characteristics. For instance, a textual format like JSON can be more flexible
than a binary format but more verbose, typically making it less efficient than a
binary format. A plaintext readable (yet relatively large) format like JSON is
potentially more usable for users operating on the logs directly, while a more
optimized yet restricted format can better suit the constraints of a large scale
operation. A custom or restricted format could be more efficient for analysis
with custom tooling but might not be interoperable with general-purpose qlog
tools.</t>
      <t>Considering these tradeoffs, JSON-based serialization formats provide features
that make them a good starting point for qlog flexibility and interoperability.
For these reasons, JSON is a recommended default and expanded considerations are
given to how to map qlog to JSON (<xref target="format-json"/>), and its streaming counterpart
JSON Text Sequences (<xref target="format-json-seq"/>). <xref target="json-interop"/> presents
interoperability considerations for both formats, and <xref target="optimizations"/> presents
potential optimizations.</t>
      <t>Serialization formats require appropriate deserializers/parsers. The
<tt>serialization_format</tt> field (<xref target="abstract-logfile"/>) is used to indicate the
chosen serialization format.</t>
      <section anchor="format-json">
        <name>qlog to JSON Mapping</name>
        <t>When mapping qlog to JSON, QlogFile (<xref target="qlog-file-def"/>) is used. The
Media Type is "application/qlog+json" per <xref target="RFC6839"/>. The file
extension/suffix <bcp14>SHOULD</bcp14> be ".qlog".</t>
        <t>In accordance with <xref section="8.1" sectionFormat="of" target="RFC8259"/>, JSON files are required to use
UTF-8 both for the file itself and the string values it contains. In addition,
all qlog field names <bcp14>MUST</bcp14> be lowercase when serialized to JSON.</t>
        <t>In order to serialize CDDL-based qlog event and data structure
definitions to JSON, the official CDDL-to-JSON mapping defined in
<xref section="E" sectionFormat="of" target="CDDL"/> <bcp14>SHOULD</bcp14> be employed.</t>
      </section>
      <section anchor="format-json-seq">
        <name>qlog to JSON Text Sequences Mapping</name>
        <t>One of the downsides of using JSON is that it is inherently a
non-streamable format. A qlog serializer could work around this by opening a
file, writing the required opening data, streaming qlog events by appending
them, and then finalizing the log by appending appropriate closing brackets,
e.g., "]}]}". However, failure to append closing brackets could lead to problems
because most JSON parsers will fail if a document is malformed. Some streaming
JSON parsers are able to handle missing closing brackets; however, they are not
widely deployed in popular environments (e.g., Web browsers).</t>
        <t>To overcome the issues related to JSON streaming, a qlog mapping to a streamable
JSON format called JSON Text Sequences (JSON-SEQ) (<xref target="RFC7464"/>) is provided.</t>
        <t>JSON Text Sequences are very similar to JSON, except that objects are
serialized as individual records, each prefixed by an ASCII Record Separator
(&lt;RS&gt;, 0x1E), and each ending with an ASCII Line Feed character (\n, 0x0A). Note
that each record can also contain any amount of newlines in its body, as long as
it ends with a newline character before the next &lt;RS&gt; character.</t>
        <t>In order to leverage the streaming capability, each qlog event is serialized and
interpreted as an individual JSON Text Sequence record, that is appended as a
new object to the back of an event stream or log file. Put differently, unlike
JSON, it does not require a document to be wrapped as a full object with
"{ ... }" or "[... ]".</t>
        <t>This alternative record streaming approach cannot be accommodated by QlogFile
(<xref target="qlog-file-def"/>). Instead, QlogFileSeq is defined in <xref target="qlog-file-seq-def"/>,
which notably includes only a single trace (TraceSeq) and omits an explicit
<tt>events</tt> array. An example is provided in <xref target="json-seq-ex"/>. The <tt>group_id</tt> field
can still be used on a per-event basis to include events from conceptually
different sources in a single JSON-SEQ qlog file.</t>
        <t>When mapping qlog to JSON-SEQ, the Media Type is "application/qlog+json-seq" per
<xref target="RFC8091"/>. The file extension/suffix <bcp14>SHOULD</bcp14> be ".sqlog" (for "streaming"
qlog).</t>
        <t>While not specifically required by the JSON-SEQ specification, all qlog field
names <bcp14>MUST</bcp14> be lowercase when serialized to JSON-SEQ.</t>
        <t>In order to serialize all other CDDL-based qlog event and data structure
definitions to JSON-SEQ, the official CDDL-to-JSON mapping defined in
<xref section="E" sectionFormat="of" target="CDDL"/> <bcp14>SHOULD</bcp14> be employed.</t>
        <section anchor="supporting-json-text-sequences-in-tooling">
          <name>Supporting JSON Text Sequences in Tooling</name>
          <t>Note that JSON Text Sequences are not supported in most default programming
environments (unlike JSON). However, several custom JSON-SEQ parsing
libraries exist in most programming languages that can be used and the format is
easy enough to parse with existing implementations (i.e., by splitting the file
into its component records and feeding them to a standard JSON parser
individually, as each record by itself is a valid JSON object).</t>
        </section>
      </section>
      <section anchor="json-interop">
        <name>JSON Interoperability</name>
        <t>Some JSON implementations have issues with the full JSON format, especially those
integrated within a JavaScript environment (e.g., Web browsers, NodeJS). I-JSON
(Internet-JSON) is a subset of JSON for such environments; see
<xref target="RFC7493"/>. One of the key limitations of JavaScript, and thus I-JSON,
is that it cannot represent full 64-bit integers in standard operating mode
(i.e., without using BigInt extensions), instead being limited to the range
-(2<sup>53</sup>)+1 to (2<sup>53</sup>)-1.</t>
        <t>To accommodate such constraints in CDDL, <xref section="E" sectionFormat="of" target="CDDL"/> suggests
defining integer types that restrict 64-bit values to the range in which I-JSON
can represent integers exactly. However, some of the protocols that qlog is
intended to support (e.g., QUIC, HTTP/3), can use the full range of uint64
values.</t>
        <t>As such, to support situations where I-JSON is in use, serializers <bcp14>MAY</bcp14> encode
uint64 values using JSON strings. qlog parsers, therefore, <bcp14>SHOULD</bcp14> support
parsing of uint64 values from JSON strings or JSON numbers unless there is out-of-band
information indicating that neither the serializer nor parser are constrained by
I-JSON.</t>
        <t>The CDDL definitions describe uint64 values as numbers. A log that encodes them
as JSON strings needs those values converted to numbers before it can be
validated against the CDDL.</t>
      </section>
      <section anchor="truncated-values">
        <name>Truncated Values</name>
        <t>For some use cases (e.g., limiting file size, privacy), it can be necessary not
to log a full raw blob (using the <tt>hexstring</tt> type) but instead a truncated
value. For example, one might only store the first 100 bytes of an HTTP response
body to be able to discern which file it actually contained. In these cases, the
original byte-size length cannot be obtained from the serialized value directly.</t>
        <t>As such, all qlog schema definitions <bcp14>SHOULD</bcp14> include a separate,
length-indicating field for all fields of type <tt>hexstring</tt> they specify, see for
example <xref target="raw-info"/>. This not only ensures the original length can always be
retrieved, but also allows the omission of any raw value bytes of the field
completely (e.g., out of privacy or security considerations).</t>
        <t>To reduce overhead however and in the case the full raw value is logged, the
extra length-indicating field can be left out. As such, tools <bcp14>SHOULD</bcp14> be able to
deal with this situation and derive the length of the field from the raw value
if no separate length-indicating field is present. The main possible
permutations are shown by example in <xref target="truncated-values-ex"/>.</t>
        <figure anchor="truncated-values-ex">
          <name>Example for serializing truncated hexstrings</name>
          <artwork><![CDATA[
// both the content's value and its length are present
// (length is redundant)
{
    "content_length": 5,
    "content": "051428abff"
}

// only the content value is present, indicating it
// represents the content's full value. The byte
// length is obtained by calculating content.length / 2
{
    "content": "051428abff"
}

// only the length is present, meaning the value
// was omitted
{
    "content_length": 5
}

// both value and length are present, but the lengths
// do not match: the value was truncated to
// the first three bytes.
{
    "content_length": 5,
    "content": "051428"
}
]]></artwork>
        </figure>
      </section>
      <section anchor="optimizations">
        <name>Optimization of Serialized Data</name>
        <t>Both the JSON and JSON-SEQ formatting options described above are serviceable in
general small to medium scale (debugging) setups. However, these approaches tend
to be relatively verbose, leading to larger file sizes. Additionally, generalized
JSON(-SEQ) (de)serialization performance is typically (slightly) lower than that
of more optimized and predictable formats. Both aspects present challenges to
large scale setups, though they may still be practical to deploy; see <xref target="ANRW-2020"/>.
JSON and JSON-SEQ compress very well using commonly-available algorithms such as
GZIP or Brotli.</t>
        <t>During the development of qlog, a multitude of alternative formatting
and optimization options were assessed and the results are <eref target="https://github.com/quiclog/internet-drafts/issues/30#issuecomment-617675097">summarized on the qlog
github
repository</eref>.</t>
        <t>Formal definition of additional qlog formats or encodings that use these or any
other optimization techniques is left to future activity, which can apply the
following guideline.</t>
        <t>In order to help tools correctly parse and process serialized qlog, it is
<bcp14>RECOMMENDED</bcp14> that new formats also define suitable file extensions and media
types. This provides a clear signal and avoids the need to provide out-of-band
information or to rely on heuristic fallbacks; see <xref target="tooling"/>.</t>
      </section>
    </section>
    <section anchor="methods-of-access-and-generation">
      <name>Methods of Access and Generation</name>
      <t>Different implementations will have different ways of generating and storing
qlogs. However, there is still value in defining a few default ways in which to
steer this generation and access of the results.</t>
      <section anchor="set-file-output-destination-via-an-environment-variable">
        <name>Set File Output Destination via an Environment Variable</name>
        <t>To provide users control over where and how qlog files are created, two
environment variables are defined. The first, QLOGFILE, indicates a full path to
where an individual qlog file should be stored. This path <bcp14>MUST</bcp14> include the full
file extension. The second, QLOGDIR, sets a general directory path in which qlog
files should be placed. This path <bcp14>MUST</bcp14> include the directory separator character
at the end.</t>
        <t>In general, QLOGDIR should be preferred over QLOGFILE if an endpoint is prone to
generate multiple qlog files. This can for example be the case for a QUIC server
implementation that logs each QUIC connection in a separate qlog file. An
alternative that uses QLOGFILE would be a QUIC server that logs all connections in
a single file and uses the <tt>group_id</tt> field (<xref target="group-ids"/>) to allow post-hoc
separation of events.</t>
        <t>Implementations <bcp14>SHOULD</bcp14> provide support for QLOGDIR and <bcp14>MAY</bcp14> provide support for
QLOGFILE.</t>
        <t>When using QLOGDIR, it is up to the implementation to choose an appropriate naming
scheme for the qlog files themselves. The chosen scheme will typically depend on
the context or protocols used. For example, a QUIC implementation can use the
Original Destination Connection ID (ODCID), followed by the vantage point type
of the logging endpoint; see <xref section="1.1" sectionFormat="of" target="QLOG-QUIC"/>. Examples of all
options for QUIC are shown in <xref target="qlogdir-example"/>.</t>
        <figure anchor="qlogdir-example">
          <name>Environment variable examples for a QUIC implementation</name>
          <artwork><![CDATA[
Command: QLOGFILE=/srv/qlogs/client.qlog quicclientbinary

Should result in the quicclientbinary executable logging a
single qlog file named client.qlog in the /srv/qlogs directory.
This is for example useful in tests when the client sets up
just a single connection and then exits.

Command: QLOGDIR=/srv/qlogs/ quicserverbinary

Should result in the quicserverbinary executable generating
several log files, one for each QUIC connection.
Given two QUIC connections, with ODCID values "abcde" and
"12345" respectively, this would result in two files:
/srv/qlogs/abcde_server.qlog
/srv/qlogs/12345_server.qlog

Command: QLOGFILE=/srv/qlogs/server.qlog quicserverbinary

Should result in the quicserverbinary executable logging
a single qlog file named server.qlog in the /srv/qlogs directory.
Given that the server handled two QUIC connections before it was
shut down, with ODCID values "abcde" and "12345" respectively,
this would result in event instances in the qlog file being
tagged with the "group_id" field with values "abcde" and "12345".
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="tooling">
      <name>Tooling Requirements</name>
      <t>Tools ingesting qlog <bcp14>MUST</bcp14> indicate which serialization format(s), qlog file and
event schema(s), compression methods and potentially other input file formats
(for example .pcap) they support. Tools <bcp14>SHOULD</bcp14> at least support .qlog
files in the JSON format (<xref target="format-json"/>). Additionally, they <bcp14>SHOULD</bcp14>
indicate exactly which values for and properties of the name
(namespace:event_type) and data fields they look for to execute their logic.
Tools <bcp14>SHOULD</bcp14> perform a (high-level) check if an input qlog file adheres to the
expected qlog file and event schemas. If a tool determines a qlog file does not
contain enough supported information to correctly execute the tool's logic, it
<bcp14>SHOULD</bcp14> generate a clear error message to this effect.</t>
      <t>Tools <bcp14>MUST NOT</bcp14> produce breaking errors for any field names and/or values in the
qlog format that they do not recognize. Tools <bcp14>SHOULD</bcp14> indicate even unknown event
occurrences within their context (e.g., marking unknown events on a timeline for
manual interpretation by the user).</t>
      <t>Tool authors should be aware that, depending on the logging implementation, some
events will not always be present in all traces. For example, using a circular
logging buffer of a fixed size, it could be that the earliest events (e.g.,
connection setup events) are later overwritten by "newer" events. Alternatively,
some events can be intentionally omitted out of privacy or file size
considerations. Tool authors are encouraged to make their tools robust enough to
still provide adequate output for incomplete logs.</t>
      <t>Tool authors should also be aware that events reflect the view of the logging
implementation; see <xref target="on-the-wire"/>. A trace can therefore disagree with a
packet capture, or with a trace from another vantage point.</t>
    </section>
    <section anchor="privacy">
      <name>Security and Privacy Considerations</name>
      <t>Protocols such as TLS <xref target="RFC8446"/> and QUIC <xref target="RFC9000"/> encrypt much of what
they send, which limits what their wire image <xref target="RFC8546"/> reveals to observers.
Logging can record information that the wire image does not reveal, creating
tension between observability, security and privacy, especially if data can be
correlated across data sources.</t>
      <t>qlog can record a broad and detailed range of data. Operators and implementers
are responsible for deciding what to log, based on their requirements and
constraints. Logged data can be compromised (<xref section="5.1.2" sectionFormat="of" target="RFC6973"/>),
which risks the privacy of all participants. Participants who rely on protocol
features, such as encryption, to protect their data can be exposed through
logging to privacy risks that they are unaware of and cannot assess or respond
to.</t>
      <section anchor="data-at-risk">
        <name>Data at Risk</name>
        <t>qlog operators and implementers need to consider security and privacy risks when
handling qlog data, including logging, storage, usage, and more. The
data types listed in this section can pose different levels of risk, depending
on the data itself and how it is handled.</t>
        <t>The following is a non-exhaustive list of example data types that could contain
sensitive information that might allow identification or correlation of
individual connections, endpoints, users or sessions across qlog or other data
sources (e.g., captures of encrypted packets):</t>
        <ul spacing="normal">
          <li>IP addresses and transport protocol port numbers.</li>
          <li>Session, Connection, or User identifiers e.g., QUIC Connection IDs (<xref section="9.5" sectionFormat="of" target="RFC9000"/>).</li>
          <li>System-level information e.g., CPU, process, or thread identifiers.</li>
          <li>Stored State e.g., QUIC address validation and retry tokens, TLS session
tickets, and HTTP cookies.</li>
          <li>TLS decryption keys, passwords, and HTTP-level API access or authorization tokens.</li>
          <li>High-resolution event timestamps or inter-event timings, event counts, packet
sizes, and frame sizes.</li>
          <li>Full or partial raw packet and frame payloads that are encrypted.</li>
          <li>Full or partial raw packet and frame payloads that are plaintext e.g., HTTP Field
values, HTTP response data, or TLS SNI field values.</li>
        </ul>
      </section>
      <section anchor="operational-implications-and-recommendations">
        <name>Operational Implications and Recommendations</name>
        <t>Operational considerations focus on authorizing capture and access to logs.
Logging of Internet protocols using qlog can be equivalent to the ability to
store or read plaintext communications. Without a more detailed analysis, all of
the security considerations of plaintext access apply. End users might not
understand the implications of qlog for security or privacy, and their
environments might limit access control techniques. Operators and implementers
are advised to:</t>
        <ul spacing="normal">
          <li>Subject qlog capture to access control and auditing, with controls that
support granular levels of information capture based on role and permissions
(e.g., capture of more-sensitive data requires higher privileges).</li>
          <li>Subject access to stored qlog files to access control and auditing.</li>
          <li>Make enabling qlog conspicuous (e.g., requiring clear and explicit actions to
start a capture) and resistant to social engineering, automation, or drive-by
attacks (e.g., by isolating or sandboxing capture from other activities in the
same process or component).</li>
          <li>Define data retention policies for the storage of qlog files.</li>
          <li>Encrypt qlog files in transit and at rest.</li>
        </ul>
      </section>
      <section anchor="data-minimization-or-anonymization">
        <name>Data Minimization or Anonymization</name>
        <t>Applying data minimization or anonymization techniques to qlog might help
address some security and privacy risks. However, removing or anonymizing data
without sufficient care might not enhance privacy or security and
could diminish the utility of qlog data.</t>
        <t>Operators and implementers are advised to balance the value of logged data
against the potential risks of voluntary or involuntary disclosure to trusted or
untrusted entities. Importantly, both the breadth and depth of the data needed
to make it useful, as well as the definition of entities depend greatly on the
intended use cases. For example, a research project might be tightly scoped,
time bound, and require participants to explicitly opt in to having their data
collected and shared in a publication. Conversely, a server administrator might
collect telemetry on an ongoing basis for operational needs, from users with
whom they have no relationship.</t>
        <t>The most extreme form of minimization or anonymization is deleting a field,
equivalent to not logging it. qlog implementations are advised to offer
fine-grained control over this on a per-use-case or per-connection basis.</t>
        <t>Data can undergo anonymization, pseudonymization, permutation, truncation,
re-encryption, or aggregation; see <xref section="B" sectionFormat="of" target="DNS-PRIVACY"/> for
techniques, especially regarding IP addresses. However, operators are advised to
be cautious, because many anonymization methods have been shown to be
insufficient to safeguard user privacy or identity, particularly with large or
easily correlated data sets.</t>
        <t>Operators are advised to consider end user rights and preferences. Active user
participation (as indicated by <xref target="RFC6973"/>) on a per-qlog basis is challenging
but aligning qlog capture, storage, and removal with existing user preference
and privacy controls is crucial. Operators are advised to consider aggressive
approaches to deletion or aggregation.</t>
        <t>Some of the most sensitive data in qlog is contained in RawInfo fields (see
<xref target="raw-info"/>), which can hold full packet and frame contents, and in fields
that log keys or plaintext application data; see <xref target="data-at-risk"/>. qlog users
are advised to include such fields only when a use case needs them.</t>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>IANA is requested to register a new entry in the "IETF URN Sub-namespace for
Registered Protocol Parameter Identifiers" registry (<xref target="RFC3553"/>):</t>
      <dl>
        <dt>Registered Parameter Identifier:</dt>
        <dd>
          <t>qlog</t>
        </dd>
        <dt>Reference:</dt>
        <dd>
          <t>This Document</t>
        </dd>
        <dt>IANA Registry Reference:</dt>
        <dd>
          <t><eref brackets="angle" target="https://www.iana.org/assignments/qlog"/></t>
        </dd>
      </dl>
      <t>IANA is requested to create the "qlog log file schema URIs" registry under a
new "qlog" heading at <eref target="https://www.iana.org/assignments/qlog"/> for the purpose
of registering log file schemas. Registrations use the Expert Review policy
(<xref section="4.5" sectionFormat="of" target="RFC8126"/>); <xref target="schema-uri"/> gives the registration
requirements and the instructions for the designated expert. The registry has
the following format/template:</t>
      <dl>
        <dt>Log File Schema URI:</dt>
        <dd>
          <t>[the log file schema identifier]</t>
        </dd>
        <dt>Description:</dt>
        <dd>
          <t>[a description of the log file schema]</t>
        </dd>
        <dt>Reference:</dt>
        <dd>
          <t>[to a specification defining the log file schema]</t>
        </dd>
      </dl>
      <t>This document furthermore adds the following two new entries to the "qlog log
file schema URIs" registry:</t>
      <table>
        <thead>
          <tr>
            <th align="left">Log File Schema URI</th>
            <th align="left">Description</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">urn:ietf:params:qlog:file:contained</td>
            <td align="left">Concrete log file schema that can contain several traces from multiple vantage points.</td>
            <td align="left">
              <xref target="qlog-file-schema"/></td>
          </tr>
          <tr>
            <td align="left">urn:ietf:params:qlog:file:sequential</td>
            <td align="left">Concrete log file schema containing a single trace, optimized for sequential read and write access.</td>
            <td align="left">
              <xref target="qlog-file-seq-schema"/></td>
          </tr>
        </tbody>
      </table>
      <t>IANA is requested to create the "qlog event schema URIs" registry under the
"qlog" heading at <eref target="https://www.iana.org/assignments/qlog"/> for the purpose of
registering event schemas. Registrations use the Expert Review policy
(<xref section="4.5" sectionFormat="of" target="RFC8126"/>); <xref target="event-schema-reg"/> gives the registration
requirements and the instructions for the designated expert. The registry has
the following format/template:</t>
      <dl>
        <dt>Event schema URI:</dt>
        <dd>
          <t>[the event schema identifier]</t>
        </dd>
        <dt>Namespace:</dt>
        <dd>
          <t>[the identifier of the namespace that this event schema either defines or extends]</t>
        </dd>
        <dt>Event Types:</dt>
        <dd>
          <t>[a comma-separated list of concrete event types defined in the event schema;
a private or non-standard event schema need not list them]</t>
        </dd>
        <dt>Description:</dt>
        <dd>
          <t>[a description of the event schema]</t>
        </dd>
        <dt>Reference:</dt>
        <dd>
          <t>[to a specification defining the event schema definition]</t>
        </dd>
      </dl>
      <t>This document furthermore adds the following two new entries to the "qlog event
schema URIs" registry:</t>
      <dl>
        <dt>Event schema URI:</dt>
        <dd>
          <t>urn:ietf:params:qlog:events:loglevel</t>
        </dd>
        <dt>Namespace:</dt>
        <dd>
          <t>loglevel</t>
        </dd>
        <dt>Event Types:</dt>
        <dd>
          <t>error,warning,info,debug,verbose</t>
        </dd>
        <dt>Description:</dt>
        <dd>
          <t>Well-known logging levels for free-form text.</t>
        </dd>
        <dt>Reference:</dt>
        <dd>
          <t><xref target="loglevel-events"/></t>
        </dd>
        <dt>Event schema URI:</dt>
        <dd>
          <t>urn:ietf:params:qlog:events:simulation</t>
        </dd>
        <dt>Namespace:</dt>
        <dd>
          <t>simulation</t>
        </dd>
        <dt>Event Types:</dt>
        <dd>
          <t>scenario,marker</t>
        </dd>
        <dt>Description:</dt>
        <dd>
          <t>Events for simulation testing.</t>
        </dd>
        <dt>Reference:</dt>
        <dd>
          <t><xref target="sim-events"/></t>
        </dd>
      </dl>
      <section anchor="iana-media-types">
        <name>Media Type Registrations</name>
        <t>IANA is requested to register the following media types in the "Media Types"
registry &lt;https://www.iana.org/assignments/media-types/&gt;.</t>
        <section anchor="iana-qlog-json">
          <name>application/qlog+json Media Type</name>
          <dl>
            <dt>Type name:</dt>
            <dd>
              <t>application</t>
            </dd>
            <dt>Subtype name:</dt>
            <dd>
              <t>qlog+json</t>
            </dd>
            <dt>Required parameters:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Optional parameters:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Encoding considerations:</dt>
            <dd>
              <t>binary; see <xref target="format-json"/></t>
            </dd>
            <dt>Security considerations:</dt>
            <dd>
              <t>See <xref target="privacy"/> of this document</t>
            </dd>
            <dt>Interoperability considerations:</dt>
            <dd>
              <t>See <xref target="json-interop"/> of this document</t>
            </dd>
            <dt>Published specification:</dt>
            <dd>
              <t>This document</t>
            </dd>
            <dt>Applications that use this media type:</dt>
            <dd>
              <t>Applications that generate, consume, or process qlog-format network protocol
logs, such as protocol analyzers, debugging tools, and performance monitoring
systems.</t>
            </dd>
            <dt>Fragment identifier considerations:</dt>
            <dd>
              <t>The syntax and semantics of fragment identifiers are as specified for
"application/json"; see <xref section="3.1" sectionFormat="of" target="RFC6839"/>.</t>
            </dd>
          </dl>
          <t>Additional information:</t>
          <dl>
            <dt>Deprecated alias names for this type:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Magic number(s):</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>File extension(s):</dt>
            <dd>
              <t>.qlog</t>
            </dd>
            <dt>Macintosh file type code(s):</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Person &amp; email address to contact for further information:</dt>
            <dd>
              <t>QUIC WG, quic@ietf.org</t>
            </dd>
            <dt>Intended usage:</dt>
            <dd>
              <t>COMMON</t>
            </dd>
            <dt>Restrictions on usage:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Author:</dt>
            <dd>
              <t>QUIC WG, quic@ietf.org</t>
            </dd>
            <dt>Change controller:</dt>
            <dd>
              <t>IETF</t>
            </dd>
          </dl>
        </section>
        <section anchor="iana-qlog-json-seq">
          <name>application/qlog+json-seq Media Type</name>
          <dl>
            <dt>Type name:</dt>
            <dd>
              <t>application</t>
            </dd>
            <dt>Subtype name:</dt>
            <dd>
              <t>qlog+json-seq</t>
            </dd>
            <dt>Required parameters:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Optional parameters:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Encoding considerations:</dt>
            <dd>
              <t>binary; see <xref target="format-json-seq"/></t>
            </dd>
            <dt>Security considerations:</dt>
            <dd>
              <t>See <xref target="privacy"/> of this document</t>
            </dd>
            <dt>Interoperability considerations:</dt>
            <dd>
              <t>See <xref target="json-interop"/> of this document</t>
            </dd>
            <dt>Published specification:</dt>
            <dd>
              <t>This document</t>
            </dd>
            <dt>Applications that use this media type:</dt>
            <dd>
              <t>Applications that generate, consume, or process qlog-format network protocol
logs in a streaming fashion, such as protocol analyzers, debugging tools, and
performance monitoring systems.</t>
            </dd>
            <dt>Fragment identifier considerations:</dt>
            <dd>
              <t>The syntax and semantics of fragment identifiers are as specified for
"application/json-seq"; see <xref section="4" sectionFormat="of" target="RFC8091"/>.</t>
            </dd>
          </dl>
          <t>Additional information:</t>
          <dl>
            <dt>Deprecated alias names for this type:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Magic number(s):</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>File extension(s):</dt>
            <dd>
              <t>.sqlog</t>
            </dd>
            <dt>Macintosh file type code(s):</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Person &amp; email address to contact for further information:</dt>
            <dd>
              <t>QUIC WG, quic@ietf.org</t>
            </dd>
            <dt>Intended usage:</dt>
            <dd>
              <t>COMMON</t>
            </dd>
            <dt>Restrictions on usage:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Author:</dt>
            <dd>
              <t>QUIC WG, quic@ietf.org</t>
            </dd>
            <dt>Change controller:</dt>
            <dd>
              <t>IETF</t>
            </dd>
          </dl>
        </section>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="RFC7493">
          <front>
            <title>The I-JSON Message Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="March" year="2015"/>
            <abstract>
              <t>I-JSON (short for "Internet JSON") is a restricted profile of JSON designed to maximize interoperability and increase confidence that software can process it successfully with predictable results.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7493"/>
          <seriesInfo name="DOI" value="10.17487/RFC7493"/>
        </reference>
        <reference anchor="RFC7464">
          <front>
            <title>JavaScript Object Notation (JSON) Text Sequences</title>
            <author fullname="N. Williams" initials="N." surname="Williams"/>
            <date month="February" year="2015"/>
            <abstract>
              <t>This document describes the JavaScript Object Notation (JSON) text sequence format and associated media type "application/json-seq". A JSON text sequence consists of any number of JSON texts, all encoded in UTF-8, each prefixed by an ASCII Record Separator (0x1E), and each ending with an ASCII Line Feed character (0x0A).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7464"/>
          <seriesInfo name="DOI" value="10.17487/RFC7464"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="CDDL">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="RFC2046">
          <front>
            <title>Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="N. Borenstein" initials="N." surname="Borenstein"/>
            <date month="November" year="1996"/>
            <abstract>
              <t>This second document defines the general structure of the MIME media typing system and defines an initial set of media types. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2046"/>
          <seriesInfo name="DOI" value="10.17487/RFC2046"/>
        </reference>
        <reference anchor="RFC3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="RFC3339">
          <front>
            <title>Date and Time on the Internet: Timestamps</title>
            <author fullname="G. Klyne" initials="G." surname="Klyne"/>
            <author fullname="C. Newman" initials="C." surname="Newman"/>
            <date month="July" year="2002"/>
            <abstract>
              <t>This document defines a date and time format for use in Internet protocols that is a profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3339"/>
          <seriesInfo name="DOI" value="10.17487/RFC3339"/>
        </reference>
        <reference anchor="RFC6839">
          <front>
            <title>Additional Media Type Structured Syntax Suffixes</title>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <author fullname="A. Melnikov" initials="A." surname="Melnikov"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>A content media type name sometimes includes partitioned meta- information distinguished by a structured syntax to permit noting an attribute of the media as a suffix to the name. This document defines several structured syntax suffixes for use with media type registrations. In particular, it defines and registers the "+json", "+ber", "+der", "+fastinfoset", "+wbxml" and "+zip" structured syntax suffixes, and provides a media type structured syntax suffix registration form for the "+xml" structured syntax suffix. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6839"/>
          <seriesInfo name="DOI" value="10.17487/RFC6839"/>
        </reference>
        <reference anchor="RFC8091">
          <front>
            <title>A Media Type Structured Syntax Suffix for JSON Text Sequences</title>
            <author fullname="E. Wilde" initials="E." surname="Wilde"/>
            <date month="February" year="2017"/>
            <abstract>
              <t>Structured syntax suffixes for media types allow other media types to build on them and make it explicit that they are built on an existing media type as their foundation. This specification defines and registers "+json-seq" as a structured syntax suffix for JSON text sequences.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8091"/>
          <seriesInfo name="DOI" value="10.17487/RFC8091"/>
        </reference>
        <reference anchor="RFC3553">
          <front>
            <title>An IETF URN Sub-namespace for Registered Protocol Parameters</title>
            <author fullname="M. Mealling" initials="M." surname="Mealling"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <author fullname="T. Hardie" initials="T." surname="Hardie"/>
            <author fullname="G. Klyne" initials="G." surname="Klyne"/>
            <date month="June" year="2003"/>
            <abstract>
              <t>This document describes a new sub-delegation for the 'ietf' URN namespace for registered protocol items. The 'ietf' URN namespace is defined in RFC 2648 as a root for persistent URIs that refer to IETF- defined resources. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="73"/>
          <seriesInfo name="RFC" value="3553"/>
          <seriesInfo name="DOI" value="10.17487/RFC3553"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="QLOG-QUIC">
          <front>
            <title>QUIC event definitions for qlog</title>
            <author fullname="Robin Marx" initials="R." surname="Marx">
              <organization>Akamai</organization>
            </author>
            <author fullname="Luca Niccolini" initials="L." surname="Niccolini">
              <organization>Meta</organization>
            </author>
            <author fullname="Marten Seemann" initials="M." surname="Seemann">
         </author>
            <author fullname="Lucas Pardue" initials="L." surname="Pardue">
              <organization>Cloudflare</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   This document describes a qlog event schema containing concrete qlog
   event definitions and their metadata for the core QUIC protocol and
   selected extensions.

Note to Readers

      Note to RFC editor: Please remove this section before publication.

   Feedback and discussion are welcome at https://github.com/quicwg/qlog
   (https://github.com/quicwg/qlog).  Readers are advised to refer to
   the "editor's draft" at that URL for an up-to-date version of this
   document.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-quic-events-13"/>
        </reference>
        <reference anchor="QLOG-H3">
          <front>
            <title>HTTP/3 qlog event definitions</title>
            <author fullname="Robin Marx" initials="R." surname="Marx">
              <organization>Akamai</organization>
            </author>
            <author fullname="Luca Niccolini" initials="L." surname="Niccolini">
              <organization>Meta</organization>
            </author>
            <author fullname="Marten Seemann" initials="M." surname="Seemann">
         </author>
            <author fullname="Lucas Pardue" initials="L." surname="Pardue">
              <organization>Cloudflare</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   This document defines qlog event schemas containing concrete events
   for the core HTTP/3 protocol and selected extensions.  It also
   defines an http namespace for the Capsule Protocol.

Note to Readers

      Note to RFC editor: Please remove this section before publication.

   Feedback and discussion are welcome at https://github.com/quicwg/qlog
   (https://github.com/quicwg/qlog).  Readers are advised to refer to
   the "editor's draft" at that URL for an up-to-date version of this
   document.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-h3-events-13"/>
        </reference>
        <reference anchor="ANRW-2020" target="https://qlog.edm.uhasselt.be/anrw/">
          <front>
            <title>Debugging QUIC and HTTP/3 with qlog and qvis</title>
            <author initials="R." surname="Marx" fullname="Robin Marx">
              <organization/>
            </author>
            <author initials="M." surname="Piraux" fullname="Maxime Piraux">
              <organization/>
            </author>
            <author initials="P." surname="Quax" fullname="Peter Quax">
              <organization/>
            </author>
            <author initials="W." surname="Lamotte" fullname="Wim Lamotte">
              <organization/>
            </author>
            <date year="2020" month="September"/>
          </front>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="RFC8546">
          <front>
            <title>The Wire Image of a Network Protocol</title>
            <author fullname="B. Trammell" initials="B." surname="Trammell"/>
            <author fullname="M. Kuehlewind" initials="M." surname="Kuehlewind"/>
            <date month="April" year="2019"/>
            <abstract>
              <t>This document defines the wire image, an abstraction of the information available to an on-path non-participant in a networking protocol. This abstraction is intended to shed light on the implications that increased encryption has for network functions that use the wire image.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8546"/>
          <seriesInfo name="DOI" value="10.17487/RFC8546"/>
        </reference>
        <reference anchor="RFC6973">
          <front>
            <title>Privacy Considerations for Internet Protocols</title>
            <author fullname="A. Cooper" initials="A." surname="Cooper"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="B. Aboba" initials="B." surname="Aboba"/>
            <author fullname="J. Peterson" initials="J." surname="Peterson"/>
            <author fullname="J. Morris" initials="J." surname="Morris"/>
            <author fullname="M. Hansen" initials="M." surname="Hansen"/>
            <author fullname="R. Smith" initials="R." surname="Smith"/>
            <date month="July" year="2013"/>
            <abstract>
              <t>This document offers guidance for developing privacy considerations for inclusion in protocol specifications. It aims to make designers, implementers, and users of Internet protocols aware of privacy-related design choices. It suggests that whether any individual RFC warrants a specific privacy considerations section will depend on the document's content.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6973"/>
          <seriesInfo name="DOI" value="10.17487/RFC6973"/>
        </reference>
        <reference anchor="DNS-PRIVACY">
          <front>
            <title>Recommendations for DNS Privacy Service Operators</title>
            <author fullname="S. Dickinson" initials="S." surname="Dickinson"/>
            <author fullname="B. Overeinder" initials="B." surname="Overeinder"/>
            <author fullname="R. van Rijswijk-Deij" initials="R." surname="van Rijswijk-Deij"/>
            <author fullname="A. Mankin" initials="A." surname="Mankin"/>
            <date month="October" year="2020"/>
            <abstract>
              <t>This document presents operational, policy, and security considerations for DNS recursive resolver operators who choose to offer DNS privacy services. With these recommendations, the operator can make deliberate decisions regarding which services to provide, as well as understanding how those decisions and the alternatives impact the privacy of users.</t>
              <t>This document also presents a non-normative framework to assist writers of a Recursive operator Privacy Statement, analogous to DNS Security Extensions (DNSSEC) Policies and DNSSEC Practice Statements described in RFC 6841.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="232"/>
          <seriesInfo name="RFC" value="8932"/>
          <seriesInfo name="DOI" value="10.17487/RFC8932"/>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>Much of the initial work by Robin Marx was done at the Hasselt and KU Leuven
Universities.</t>
      <t>Thanks to Jana Iyengar, Brian Trammell, Dmitri Tikhonov, Stephen Petrides, Jari
Arkko, Marcus Ihlar, Victor Vasiliev, Mirja Kuehlewind, Jeremy Laine, Kazu
Yamamoto, Christian Huitema, Hugo Landau, Will Hawkins, Mathis Engelbart, Kazuho
Oku, and Jonathan Lennox for their feedback and suggestions.</t>
    </section>
    <section numbered="false" removeInRFC="true" anchor="change-log">
      <name>Change Log</name>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-14">
        <name>Since draft-ietf-quic-qlog-main-schema-14:</name>
        <ul spacing="normal">
          <li>Wide range of editorial and consistency changes</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-13">
        <name>Since draft-ietf-quic-qlog-main-schema-13:</name>
        <ul spacing="normal">
          <li>Added IANA registration templates (#425)</li>
          <li>Added clarification on extending qlog with new protocol support (#516)</li>
          <li>Wide range of editorial changes</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-12">
        <name>Since draft-ietf-quic-qlog-main-schema-12:</name>
        <ul spacing="normal">
          <li>Changed Path and related fields to Tuple (#491)</li>
          <li>Replaced all lenght fields with raw.length (#495)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-10">
        <name>Since draft-ietf-quic-qlog-main-schema-10:</name>
        <ul spacing="normal">
          <li>Multiple editorial changes</li>
          <li>Remove protocol_types and move event_schemas to Trace and TraceSeq (#449)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-09">
        <name>Since draft-ietf-quic-qlog-main-schema-09:</name>
        <ul spacing="normal">
          <li>Renamed <tt>protocol_type</tt> to <tt>protocol_types</tt> (#427)</li>
          <li>Moved Trigger section. Purely editorial (#430)</li>
          <li>Removed the concept of categories and updated extension and event schema logic
to match. Major change (#439)</li>
          <li>Reworked completely how we handle timestamps and clocks. Major change (#433)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-08">
        <name>Since draft-ietf-quic-qlog-main-schema-08:</name>
        <ul spacing="normal">
          <li>TODO (we forgot...)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-07">
        <name>Since draft-ietf-quic-qlog-main-schema-07:</name>
        <ul spacing="normal">
          <li>Added path and PathID (#336)</li>
          <li>Removed custom definition of uint64 type (#360, #388)</li>
          <li>ProtocolEventBody is now called ProtocolEventData (#352)</li>
          <li>Editorial changes (#364, #289, #353, #361, #362)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-06">
        <name>Since draft-ietf-quic-qlog-main-schema-06:</name>
        <ul spacing="normal">
          <li>Editorial reworking of the document (#331, #332)</li>
          <li>Updated IANA considerations section (#333)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-05">
        <name>Since draft-ietf-quic-qlog-main-schema-05:</name>
        <ul spacing="normal">
          <li>Updated qlog_version to 0.4 (due to breaking changes) (#314)</li>
          <li>Renamed 'transport' category to 'quic' (#302)</li>
          <li>Added 'system_info' field (#305)</li>
          <li>Removed 'summary' and 'configuration' fields (#308)</li>
          <li>Editorial and formatting changes (#298, #303, #304, #316, #320, #321, #322, #326, #328)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-04">
        <name>Since draft-ietf-quic-qlog-main-schema-04:</name>
        <ul spacing="normal">
          <li>Updated RawInfo definition and guidance (#243)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-03">
        <name>Since draft-ietf-quic-qlog-main-schema-03:</name>
        <ul spacing="normal">
          <li>Added security and privacy considerations discussion (#252)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-02">
        <name>Since draft-ietf-quic-qlog-main-schema-02:</name>
        <ul spacing="normal">
          <li>No changes - new draft to prevent expiration</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-01">
        <name>Since draft-ietf-quic-qlog-main-schema-01:</name>
        <ul spacing="normal">
          <li>Change the data definition language from TypeScript to CDDL (#143)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-00">
        <name>Since draft-ietf-quic-qlog-main-schema-00:</name>
        <ul spacing="normal">
          <li>Changed the streaming serialization format from NDJSON to JSON Text Sequences
(#172)</li>
          <li>Added Media Type definitions for various qlog formats (#158)</li>
          <li>Changed to semantic versioning</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-marx-qlog-main-schema-draft-02">
        <name>Since draft-marx-qlog-main-schema-draft-02:</name>
        <ul spacing="normal">
          <li>These changes were done in preparation of the adoption of the drafts by the QUIC
working group (#137)</li>
          <li>Moved RawInfo, Importance, Generic events and Simulation events to this document.</li>
          <li>Added basic event definition guidelines</li>
          <li>Made protocol_type an array instead of a string (#146)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-marx-qlog-main-schema-01">
        <name>Since draft-marx-qlog-main-schema-01:</name>
        <ul spacing="normal">
          <li>
            <t>Decoupled qlog from the JSON format and described a mapping instead (#89)
            </t>
            <ul spacing="normal">
              <li>Data types are now specified in this document and proper definitions for
fields were added in this format</li>
              <li>64-bit numbers can now be either strings or numbers, with a preference for
numbers (#10)</li>
              <li>binary blobs are now logged as lowercase hex strings (#39, #36)</li>
              <li>added guidance to add length-specifiers for binary blobs (#102)</li>
            </ul>
          </li>
          <li>Removed "time_units" from Configuration. All times are now in ms instead (#95)</li>
          <li>Removed the "event_fields" setup for a more straightforward JSON format
(#101,#89)</li>
          <li>Added a streaming option using the NDJSON format (#109,#2,#106)</li>
          <li>Described optional optimization options for implementers (#30)</li>
          <li>Added QLOGDIR and QLOGFILE environment variables, clarified the .well-known URL
usage (#26,#33,#51)</li>
          <li>Overall tightened up the text and added more examples</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-marx-qlog-main-schema-00">
        <name>Since draft-marx-qlog-main-schema-00:</name>
        <ul spacing="normal">
          <li>All field names are now lowercase (e.g., category instead of CATEGORY)</li>
          <li>Triggers are now properties on the "data" field value, instead of separate field
types (#23)</li>
          <li>group_ids in common_fields is now just also group_id</li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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
gm4BAA==

-->

</rfc>
