<?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-12" 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-12"/>
    <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="July" day="07"/>
    <area>Transport</area>
    <workgroup>QUIC</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>qlog provides extensible structured logging for network protocols, allowing for
easy sharing of data that benefits common debug and analysis methods and
tooling. This document describes key concepts of qlog: formats, files, traces,
events, and extension points. This definition includes the high-level log file
schemas, and generic event schemas. Requirements and guidelines for creating
protocol-specific event schemas are also presented. All schemas are defined
independent of serialization format, allowing logs to be represented in various
ways such as JSON, CSV, or protobuf.</t>
    </abstract>
    <note>
      <name>Note to Readers</name>
      <ul empty="true">
        <li>
          <t>Note to RFC editor: Please remove this section before publication.</t>
        </li>
      </ul>
      <t>Feedback and discussion are welcome at
<eref target="https://github.com/quicwg/qlog">https://github.com/quicwg/qlog</eref>. Readers are
advised to refer to the "editor's draft" at that URL for an up-to-date version
of this document.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>Endpoint logging is a useful strategy for capturing and understanding how
applications using network protocols are behaving, particularly where protocols
have an encrypted wire image that restricts observers' ability to see what is
happening.</t>
      <t>Many applications implement logging using a custom, non-standard logging format.
This has an effect on the tools and methods that are used to
analyze the logs, for example to perform root cause analysis of an
interoperability failure between distinct implementations. A lack of a common
format impedes the development of common tooling that can be used by all parties
that have access to logs.</t>
      <t>qlog is an extensible structured logging for network protocols that allows for
easy sharing of data that benefits common debug and analysis methods and
tooling. This document describes key concepts of qlog: formats, files, traces,
events, and extension points. This definition includes the high-level log file
schemas, and generic event schemas. Requirements and guidelines for creating
protocol-specific event schemas are also presented. Accompanying documents
define event schemas for QUIC (<xref target="QLOG-QUIC"/>) and HTTP/3 (<xref target="QLOG-H3"/>).</t>
      <t>The goal of qlog is to provide amenities and default characteristics that each
logging file should contain (or should be able to contain), such that generic
and reusable toolsets can be created that can deal with logs from a variety of
different protocols and use cases.</t>
      <t>As such, qlog provides versioning, metadata inclusion, log aggregation, event
grouping and log file size reduction techniques.</t>
      <t>All qlog schemas can be serialized in many ways (e.g., JSON, CBOR, protobuf,
etc). This document describes only how to employ <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>
        <t>Events are defined with an importance level as described in <xref target="importance"/>}.</t>
      </section>
      <section anchor="use-of-cddl">
        <name>Use of CDDL</name>
        <t>To define events and data structures, all qlog documents use the Concise Data
Definition Language <xref target="CDDL"/>. This document uses the basic syntax, the
specific <tt>text</tt>, <tt>uint</tt>, <tt>float32</tt>, <tt>float64</tt>, <tt>bool</tt>, and <tt>any</tt> types, as well
as the <tt>.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. The time field is a float64 and it is
typically used to represent a duration in milliseconds, with a fractional component
to microsecond or nanosecond resolution.</t>
        <t>There are several options for generating and logging timestamps, these are
governed by the ReferenceTime type (optionally included in the "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.</t>
          <figure anchor="loglevel-error-def">
            <name>LogLevelError definition</name>
            <sourcecode type="cddl"><![CDATA[
LogLevelError = {
    ? code: uint64
    ? message: text

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

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

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

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

    * $$loglevel-verbose-extension
}
]]></sourcecode>
          </figure>
        </section>
      </section>
      <section anchor="sim-events">
        <name>Simulation Events</name>
        <t>When evaluating a protocol implementation, one typically sets up a series of
interoperability or benchmarking tests, in which the test situations can change
over time. For example, the network bandwidth or latency can vary during the
test, or the network can be fully 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.</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="17" month="March" year="2025"/>
            <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-10"/>
        </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="17" month="March" year="2025"/>
            <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-10"/>
        </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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
HPj6dsT1kJvbXs4aCz11v/1vT16CaX1D8va0JKL5yCdI0CromKqFtWqCZAB7
OnfpbSEEgGNGdsGAZxyCUyU4rIh3xWGb6E4aK+7SqVlo/I/NcoZyiX/xmXji
3L+ghS9HpE4QeyhJBFv9tGMNq+Qn7qyHIn309F5p6uWkzs/bZk9U3r2j/Vv8
STSddnD34N7de3f2H9zblaqTs7RdBjYY0tp/1pI/7F2GmKKhs6qjqLbhkn23
xfiSqzLEd44rPWYcBmEFsTe/BJWHOTh3gIGRCWJi+Q5Kv7eCwGy3UvuHT0df
ws0Cm3vHwMUFrkQC8EFJah7RYneQrGN6I8fOLjkXlwn1hWR86A8EKw2BQyiJ
3JfERKjlS2B21FoRItWpbRU2AKnvh8oj+VTKtEnvLjH9F+bm4giNbXqNNNzi
GuKIxyqWEjqUndPthNW92dRb9Vb2jMuwihg/ZjBgfiE4GJcuhzfDdu0q7FZj
40ow1Vp1FBtBC9pBf8AdAWA7VFPUNaEJKhZENeJJwSFwmy2ORw+JU5UjZaaQ
9hXRmgWEshuV2fSyicZ2WrRyRlL3CUjaWle9d2XO9vHItoO6wew3gyhrxyBR
SVZegnO0tODsnOXbpHoXFEhU9OOUp6vKbRo96fRkpuYa2Vqo7Prtk6ePvYxU
eGcGyqzg2G1qF3lr/AKiqqusxlk/In55rdE3j5vGK8hqJN9ClvPoyau+JL/l
xpxUuSIaJQP7UwqAiKpWSheiaxcSxmvMrxc5x6SgOUFyIpddV+GXF216wX3r
2NGNYzJwsi8YJz2RYCa5kkjsqVQOaKPu7GEXumhQoaSHVBH0GMmd4/JgXNKn
7lSUU/MRItjYHspPhvIqnfLywcGRncxdzHyMBDdhU1e262T+aMJcukvrVLhN
zvtUGFu0sIZQn65/h9t54qsB0Se4gn0GH3GodnBZjS3rIK6R02zoPa66td2n
uIadHaHVg9zwjLMNm9NH+L/HTYmmWC7MstiFfyWRnhz7GocnzNlXI70lCh8y
E93l1rdd9yHEHPUkLzBFDFKXT4RwXoN530rdO7P0hR483vRiBXVsF3F0nCb9
AvVfmAHgUUS+HgYkevIo23nx6OGTR7t9ZZLBt4R6eXAVC+Zrrx+nwRsc+W7X
ArVrQugrO4gWIZZN+sl5JZU1UwCL7u7mDl2ok07HeuwR9uu9pn7HnrdmbzxF
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
Jdizzv1/0M7Vx39UAQA=

-->

</rfc>
