<?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-11" 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-11"/>
    <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>Cloudflare</organization>
      <address>
        <email>lucas@lucaspardue.com</email>
      </address>
    </author>
    <date year="2025" month="March" day="17"/>
    <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>
      <t>Concrete examples of integrations of this schema in
various programming languages can be found at
<eref target="https://github.com/quiclog/qlog/">https://github.com/quiclog/qlog/</eref>.</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 <xref target="JSON"/>, its subset
<xref target="I-JSON"/>, and its streamable derivative
<xref target="JSON-Text-Sequences"/>.</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="JSON"/>) unless
otherwise indicated.</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>.default</tt>, <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 not significant and qlog tools <bcp14>MUST NOT</bcp14> assume so. Other qlog serialization
formats <bcp14>MAY</bcp14> define field order significance, 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>
        <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>
      </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 common fields,
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>
    <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 "file_schema" 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 "serialization_format" 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 "file_schema" and "serialization_format" fields and
their values <bcp14>SHOULD</bcp14> be in the first 256 characters/bytes of the resulting log
file.</t>
      <t>The optional "title" and "description" 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 dereferencable,
allowing for confidential use or to cover the case where the log file schema
continues to be used after the organization that defined them 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 "traces"
field contains an array of qlog traces (<xref target="trace"/>), each of which contain
metadata and an array of qlog events (<xref target="abstract-event"/>).</t>
      <t>The default serialization format for QlogFile is JSON; see <xref target="format-json"/> for
guidance on populating the "serialization_format" 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 tags, 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 advantageous to group several related qlog traces together in a single
file. For example, it is possible to simultaneously perform logging on the
client, on the server, and on a single point on their common network path. For
analysis, it is useful to aggregate these three individual traces together into
a single file, so it can be uniquely stored, transferred, and annotated.</t>
        <t>The QlogFile "traces" 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 in component to files into the
combined "traces" array of a new, aggregated qlog file.</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 only 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 "title" and "description" fields provide additional free-text
information about the trace.</t>
        <t>The optional "common_fields" field is described in <xref target="common-fields"/>.</t>
        <t>The optional "vantage_point" field is described in <xref target="vantage-point"/>.</t>
        <t>The required "event_schemas" field contains event schema URIs that identify
concrete event namespaces and their associated types recorded in the "events"
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 "common_fields" list and "vantage_point" 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="traceerror">
        <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 "traces" 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 for attempted find of 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>
        <t>Note that another way to combine events of different traces in a single qlog file
is through the use of the "group_id" field, discussed in <xref target="group-ids"/>.</t>
      </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 an array
of component traces. This is defined in <xref target="qlog-file-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>QlogFile extends LogFile using the CDDL unwrap operator (~), which copies the
fields presented in <xref target="abstract-logfile"/>. Additionally, the required "trace"
field contains a singular trace (<xref target="trace"/>). All qlog events in the file are
related to this trace; see <xref target="traceseq"/>.</t>
      <t>See <xref target="format-json-seq"/> for guidance on populating the "serialization_format"
field and other serialization considerations.</t>
      <t>JSON-SEQ serialization example:</t>
      <figure anchor="json-seq-ex">
        <name>Top-level element</name>
        <artwork><![CDATA[
// list of qlog events, serialized in accordance with RFC 7464,
// starting with a Record Separator character and ending with a
// newline.
// For display purposes, Record Separators are rendered as <RS>

<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: VantagePointType
}

; client = endpoint which initiates the connection
; server = endpoint which accepts the connection
; network = observer in between client and server
VantagePointType = "client" /
                   "server" /
                   "network" /
                   "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 flow 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 flow 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 follow 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
    ? path: PathID
    ? 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: "time"
(<xref target="time-based-fields"/>), "name" (<xref target="event-types-and-schema"/>), and "data"
(<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 common fields, 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: "time_format"
(<xref target="time-based-fields"/>), path (<xref target="path-field"/>) "trigger" (<xref target="trigger-field"/>),
and "group_id" (<xref target="group-ids"/>).</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
"common_fields" (<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>Each event <bcp14>MUST</bcp14> include a "time" field to indicate the timestamp that it
occurred. It is a duration measured from some point in time; its units depend on the type of clock chosen and system used. Typically however, a millisecond resolution is employed.
There are several options for generating and logging timestamps, these are
governed by the ReferenceTime type (optionally included in the "reference_time"
field contained in a trace's "common_fields" (<xref target="common-fields"/>)) and TimeFormat
type (optionally included in the "time_format" field contained in the event
itself, or a trace's "common_fields").</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 "time" 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 .default "system"
    epoch: RFC3339DateTime / "unknown" .default "1970-01-01T00:00:00.000Z"

    ? wall_clock_time: RFC3339DateTime
}

RFC3339DateTime = text
]]></sourcecode>
        </figure>
        <t>The required "clock_type" 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 "epoch" field is the start of the ReferenceTime. When using the
"system" clock type, the epoch 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 epoch field <bcp14>MUST</bcp14> have the value
"unknown".</t>
        <t>The optional "wall_clock_time" 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 "time" 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" .default "relative_to_epoch"
]]></sourcecode>
        </figure>
        <dl>
          <dt>relative_to_epoch:</dt>
          <dd>
            <t>A duration relative to the ReferenceTime "epoch" field. This approach uses the
largest amount of characters. It is good for stateless loggers. This is the default value of the "time_format" field.</t>
          </dd>
          <dt>relative_to_previous_event:</dt>
          <dd>
            <t>A delta-encoded value, based on the previously logged value. The first event
in a trace is always relative to the ReferenceTime. This approach uses the
least amount of characters. It is suitable for stateful loggers.</t>
          </dd>
        </dl>
        <t>Events in each individual trace <bcp14>SHOULD</bcp14> be logged in strictly ascending timestamp
order (though not necessarily absolute value, for the "relative_to_previous_event"
format). Tools <bcp14>MAY</bcp14> sort all events on the timestamp before processing them,
though are not required to (as this could impose a significant processing
overhead). This can be a problem especially for multi-threaded and/or streaming
loggers, who could consider using a separate post-processor to order qlog events
in time if a tool do not provide this feature.</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="path-field">
        <name>Path</name>
        <t>A qlog event can be associated with a single "network path" (usually, but not
always, identified by a 4-tuple of IP addresses and ports). In many cases, the
path will be the same for all events in a given trace, and does not need to be
logged explicitly with each event. In this case, the "path" field can be omitted
(in which case the default value of "" is assumed) or reflected in
"common_fields" instead (see <xref target="common-fields"/>).</t>
        <t>However, in some situations, such as during QUIC's Connection Migration or when
using Multipath features, it is useful to be able to split events across
multiple (concurrent) paths.</t>
        <t>Definition:</t>
        <figure anchor="path-def">
          <name>PathID definition</name>
          <sourcecode type="cddl"><![CDATA[
PathID = text .default ""
]]></sourcecode>
        </figure>
        <t>The "path" field is an identifier that is associated with a single network path.
This document intentionally does not define further how to choose this
identifier's value per-path or how to potentially log other parameters that can
be associated with such a path. This is left for other documents. Implementers
are free to encode path information directly into the PathID or to log
associated info in a separate event. For example, QUIC has the "path_assigned"
event to couple the PathID value to a specific path configuration, see
<xref target="QLOG-QUIC"/>.</t>
      </section>
      <section anchor="group-ids">
        <name>Grouping</name>
        <t>As discussed in <xref target="trace"/>, 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, they might add a "ODCID" field to each event. However, a
middlebox logging IP or TCP traffic might rather use four-tuples to identify
connections, and add a "four_tuple" field.</t>
        <t>As such, to provide consistency and ease of tooling in cross-protocol and
cross-context setups, qlog instead defines the common "group_id" 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 by four tuples
and QUIC connection IDs:</t>
        <figure anchor="group-id-ex">
          <name>GroupID example</name>
          <artwork><![CDATA[
"events": [
    {
        "time": 1553986553579,
        "group_id": "ip1=2001:67c:1232:144:9498:6df6:f450:110b,
                   ip2=2001:67c:2b0:1c1::198,port1=59105,port2=80",
        "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 Multipath transport protocol) it might
make sense to add additional contextual per-event fields (for example PathID,
see <xref target="path-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 "group_id" field with an identical value for each event
instance, this field is typically logged once in "common_fields", see
<xref target="common-fields"/>.</t>
      </section>
      <section anchor="systeminformation">
        <name>SystemInformation</name>
        <t>The "system_info" 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>
        <sourcecode type="cddl"><![CDATA[
SystemInformation = {
  ? processor_id: uint32
  ? process_id: uint32
  ? thread_id: uint32
}
]]></sourcecode>
      </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: "time", "name" 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
"group_id"). 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 making logging easier, qlog uses the "common_fields" 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-29T:22: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-29T:22:55:53.572Z"
            },

            "time": 7,
            "name": "http: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-29T:22:55:53.572Z"
        },
    },
    "events": [
        {
            "time": 2,
            "name": "quic:packet_received",
            "data": { ... }
        },{
            "time": 7,
            "name": "http:frame_parsed",
            "data": { ... }
        }
    ]
}
]]></artwork>
        </figure>
        <t>An event's "common_fields" 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 = {
    ? path: PathID
    ? 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 example of such
fields are "time" and "data", who 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>QUICPacketHeader</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>.</t>
      <t>Concrete event types <bcp14>MUST</bcp14> belong to a single event namespace and <bcp14>MUST</bcp14> have a
registered non-empty identifier of type <tt>text</tt>.</t>
      <t>New namespaces <bcp14>MUST</bcp14> have a registered 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.</t>
      <t>A single event schema can contain exactly one of the below:</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 see
<xref target="generic-event-schema"/>).</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 globally-unique "extension"
identifier using 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 requirement for event schema URIs are provided in
<xref target="event-schema-reg"/>. Event schemas by themselves are immutable and <bcp14>MUST NOT</bcp14> be
extended.</t>
      <t>Implementations that record concrete event types <bcp14>SHOULD</bcp14> list all event schemas
in use. 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"/>)
classes. The <tt>event_schemas</tt> is a hint to tools about the possible event
namespaces, their extensions, and the event types/data types contained therein,
that a qlog trace might contain. The trace <bcp14>MAY</bcp14> still contain event types that do
not belong to a listed event schema. Inversely, 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>Extentions 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 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>Event schemas that define a new namespace <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, this document defines two event
schemas (<xref target="generic-event-schema"/>) for two namespaces: <tt>loglevel</tt> and <tt>sim</tt>.
Other examples of event schema define the <tt>quic</tt> <xref target="QLOG-QUIC"/> and <tt>http3</tt>
          <xref target="QLOG-H3"/> namespaces.</t>
        <t>Event schemas that extend an existing namespace <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
dereferencable, 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 "data" 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>In order to keep qlog fully extensible, two separate CDDL extension points
("sockets" or "plugs") are used to fully define data fields.</t>
        <t>Firstly, to allow existing data field definitions to be extended (for example by
adding an additional field needed for a new protocol feature), a CDDL "group
socket" is used. This takes the form of a subfield with a name of <tt>*
$$NAMESPACE-EVENTTYPE-extension</tt>. This field acts as a placeholder that can
later be replaced with newly defined fields by assigning them to the socket with
the <tt>//=</tt> operator. Multiple extensions can be assigned to the same group
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, to allow documents to define fully new event data field definitions
(as opposed to extend existing ones), a CDDL "type socket" is used. For this
purpose, the type of the "data" field in the qlog Event type (see <xref target="event-def"/>)
is the extensible <tt>$ProtocolEventData</tt> type. This field acts as an open enum of
possible types that are allowed for the data field. As such, any new event data
field is defined as its own CDDL type and later merged with the existing
<tt>$ProtocolEventData</tt> enum using the <tt>/=</tt> extension operator. Any generic
key-value map type can be assigned to <tt>$ProtocolEventData</tt>. The example in
<xref target="protocoleventdata-def"/> demonstrates <tt>$ProtocolEventData</tt> being 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 schema 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 schema.</t>
        <t>A combined but purely illustrative example of the use of both extension points
for a conceptual QUIC "packet_sent" 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 = {
    ? packet_size: uint16
    header: QUICPacketHeader
    ? frames:[* QUICFrame]

    * $$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": {
      "packet_size": 1280,
      "header": {
          "packet_type": "1RTT",
          "packet_number": 123
      },
      "frames": [
          {
              "frame_type": "stream",
              "length": 1000,
              "offset": 456
          },
          {
              "frame_type": "padding"
          }
      ],
      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 "trigger" 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 "trigger", holding a
string value.</t>
          <t>For example, the QUIC "packet_dropped" event (<xref section="5.7" sectionFormat="of" target="QLOG-QUIC"/>)
includes a trigger field that identifies the precise reason why a QUIC packet
was dropped:</t>
          <figure anchor="trigger-ex">
            <name>Trigger example</name>
            <artwork><![CDATA[
QUICPacketDropped = {

    ; Primarily packet_type should be filled here,
    ; as other fields might not be decrypteable or parseable
    ? header: PacketHeader
    ? raw: RawInfo
    ? datagram_id: uint32
    ? details: {* text => any}
    ? trigger:
        "internal_error" /
        "rejected" /
        "unsupported" /
        "invalid" /
        "duplicate" /
        "connection_unknown" /
        "decryption_failure" /
        "key_unavailable" /
        "general"

    * $$quic-packetdropped-extension
}
]]></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 e.g., 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>Note that in some cases, implementers might not want to log for example data
content details in Core-level events due to performance or privacy considerations.
In this case, they <bcp14>SHOULD</bcp14> use (a subset of) relevant Base-level events instead to
ensure usability of the qlog output. As an example, implementations that do not
log QUIC <tt>packet_received</tt> events and thus also not which (if any) ACK frames the
packet contains, <bcp14>SHOULD</bcp14> log <tt>packets_acked</tt> events instead.</t>
        <t>Finally, for event types whose data (partially) overlap with other event types'
definitions, where necessary the event definition document should include explicit
guidance on which to use in specific situations.</t>
      </section>
      <section anchor="tooling-expectations">
        <name>Tooling Expectations</name>
        <t>qlog is an extensible format and it is expected that new event schema 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 "trigger"
property within the "data" field, or other member fields of the "data" 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
types of approach have been observed: a) those that map directly to concepts
seen in the protocols (e.g., <tt>packet_sent</tt>) and b) those that act as aggregating
events that combine data from several possible protocol behaviors or code paths
into one (e.g., <tt>parameters_set</tt>). The latter are typically used as a means to
reduce the amount of unique event definitions, as reflecting each possible
protocol event as a separate qlog entity would cause an explosion of event
types.</t>
        <t>Additionally, logging duplicate data is typically prevented as much as possible.
For example, packet header values that remain consistent across many packets are
split into separate events (for example <tt>spin_bit_updated</tt> or
<tt>connection_id_updated</tt> for QUIC).</t>
        <t>Finally, when logging additional state change events, those state changes can
often be directly inferred from data on the wire (for example flow control limit
changes). As such, if the implementation is bug-free and spec-compliant, logging
additional events is typically avoided. Exceptions have been made for common
events that benefit from being easily identifiable or individually logged (for
example <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; see <xref target="importance"/>.</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; see <xref target="importance"/>.</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; see <xref target="importance"/>.</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; see <xref target="importance"/>.</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; see <xref target="importance"/>.</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 disable 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; see
<xref target="importance"/>.</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 emulation conditions are triggered at set times
(e.g., at 3 seconds in 2% packet loss is introduced, at 10s a NAT rebind is
triggered). It has Extra importance level; see <xref target="importance"/>.</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 "raw" of type RawInfo. The exact definition of
entities, headers, trailers and payloads depend 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>The RawInfo:data field can be truncated for privacy or security purposes, see
<xref target="truncated-values"/>. In this case, the length and payload_length fields should
still indicate the non-truncated lengths when used for debugging purposes.</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), event definition documents <bcp14>SHOULD</bcp14> define 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
"serialization_format" 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>As described in <xref target="qlog-file-schema"/>, JSON is the default qlog serialization.
When mapping qlog to normal 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 normal 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 tags e.g.,
"]}]}". However, failure to append closing tags, 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 tags, 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
default 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
"events" array. An example is provided in <xref target="json-seq-ex"/>. The "group_id" 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 normal 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 normal 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="I-JSON"/>. 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"/> recommends
defining new CDDL types for int64 and uint64 that limit their values to the
restricted 64-bit integer range. 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, seralizers <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>
      </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>MUST</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 the
optimization techniques described here, or any other optimization technique is
left to future activity that can apply the following guidelines.</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 "group_id" 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, for QUIC, it is recommended to use the
Original Destination Connection ID (ODCID), followed by the vantage point type of
the logging endpoint. 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 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 logs 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 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 ingestion qlog <bcp14>MUST</bcp14> indicate which qlog version(s), qlog 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 default 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>
    </section>
    <section anchor="privacy">
      <name>Security and privacy considerations</name>
      <t>Protocols such as TLS <xref target="RFC8446"/> and QUIC <xref target="RFC9000"/> offer secure protection
for the wire image <xref target="RFC8546"/>. Logging can reveal aspects of the wire image
that would ordinarily be protected, creating tension between observability,
security and privacy, especially if data can be correlated across data sources.</t>
      <t>qlog permits logging of a broad and detailed range of data. Operators and
implementers are responsible for deciding what data is logged to address their
requirements and constraints. As per <xref target="RFC6973"/>, operators must be aware that
data could be compromised, risking the privacy of all participants. Where
entities expect protocol features to ensure data privacy, logging might
unknowingly be subject to broader privacy risks, undermining their ability to
assess or respond effectively.</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
considerations presented in this section may pose varying risks depending on the
the data itself or its handling.</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 should 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.</t>
        <t>It is recommended that qlog capture is subject to access control and auditing.
These controls should support granular levels of information capture based on
role and permissions (e.g., capture of more-sensitive data requires higher
privileges).</t>
        <t>It is recommended that access to stored qlogs is subject to access control and
auditing.</t>
        <t>End users might not understand the implications of qlog to security or privacy,
and their environments might limit access control techniques. Implementations should
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; for example, isolation or sandboxing of capture from other activities
in the same process or component.</t>
        <t>It is recommended that data retention policies are defined for the storage of
qlog files.</t>
        <t>It is recommended that qlog files are encrypted in transit and at rest.</t>
      </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 should balance the value of logged data with 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
with the intention for this to be shared in a publication. Conversely, a server
administrator might desire to collect telemetry, from users whom they have no
relationship with, for continuing operational needs.</t>
        <t>The most extreme form of minimization or anonymization is deleting a field,
equivalent to not logging it. qlog implementations should offer fine-grained
control for 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 should 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 should 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 should consider agressive approaches to deletion or
aggregation.</t>
        <t>The most sensitive data in qlog is typically contained in RawInfo type fields
(see <xref target="raw-info"/>). Therefore, qlog users should exercise caution and limit the
inclusion of such fields for all but the most stringent use cases.</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
at <eref target="https://www.iana.org/assignments/qlog"/> for the purpose of registering
log file schema. It 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 seqential 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
at <eref target="https://www.iana.org/assignments/qlog"/> for the purpose of registering
event schema. It 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]</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>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="JSON">
          <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="I-JSON">
          <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="JSON-Text-Sequences">
          <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="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="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="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="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="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="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>
        <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="21" month="October" year="2024"/>
            <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.

   Concrete examples of integrations of this schema in various
   programming languages can be found at https://github.com/quiclog/
   qlog/ (https://github.com/quiclog/qlog/).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-quic-events-09"/>
        </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="21" month="October" year="2024"/>
            <abstract>
              <t>   This document defines a qlog event schema containing concrete events
   for the core HTTP/3 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.

   Concrete examples of integrations of this schema in various
   programming languages can be found at https://github.com/quiclog/
   qlog/ (https://github.com/quiclog/qlog/).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-h3-events-09"/>
        </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="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>
      </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 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-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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
EuxZ5/4/nvyQ9udUAQA=

-->

</rfc>
