<?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-10" 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-10"/>
    <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="2024" month="October" day="21"/>
    <area>Transport</area>
    <workgroup>QUIC</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>qlog provides extensible structured logging for network protocols, allowing for
easy sharing of data that benefits common debug and analysis methods and
tooling. This document describes key concepts of qlog: formats, files, traces,
events, and extension points. This definition includes the high-level log file
schemas, and generic event schemas. Requirements and guidelines for creating
protocol-specific event schemas are also presented. All schemas are defined
independent of serialization format, allowing logs to be represented in various
ways such as JSON, CSV, or protobuf.</t>
    </abstract>
    <note>
      <name>Note to Readers</name>
      <ul empty="true">
        <li>
          <t>Note to RFC editor: Please remove this section before publication.</t>
        </li>
      </ul>
      <t>Feedback and discussion are welcome at
<eref target="https://github.com/quicwg/qlog">https://github.com/quicwg/qlog</eref>. Readers are
advised to refer to the "editor's draft" at that URL for an up-to-date version
of this document.</t>
      <t>Concrete examples of integrations of this schema in
various programming languages can be found at
<eref target="https://github.com/quiclog/qlog/">https://github.com/quiclog/qlog/</eref>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>Endpoint logging is a useful strategy for capturing and understanding how
applications using network protocols are behaving, particularly where protocols
have an encrypted wire image that restricts observers' ability to see what is
happening.</t>
      <t>Many applications implement logging using a custom, non-standard logging format.
This has an effect on the tools and methods that are used to
analyze the logs, for example to perform root cause analysis of an
interoperability failure between distinct implementations. A lack of a common
format impedes the development of common tooling that can be used by all parties
that have access to logs.</t>
      <t>qlog is an extensible structured logging for network protocols that allows for
easy sharing of data that benefits common debug and analysis methods and
tooling. This document describes key concepts of qlog: formats, files, traces,
events, and extension points. This definition includes the high-level log file
schemas, and generic event schemas. Requirements and guidelines for creating
protocol-specific event schemas are also presented. Accompanying documents
define event schemas for QUIC (<xref target="QLOG-QUIC"/>) and HTTP/3 (<xref target="QLOG-H3"/>).</t>
      <t>The goal of qlog is to provide amenities and default characteristics that each
logging file should contain (or should be able to contain), such that generic
and reusable toolsets can be created that can deal with logs from a variety of
different protocols and use cases.</t>
      <t>As such, qlog provides versioning, metadata inclusion, log aggregation, event
grouping and log file size reduction techniques.</t>
      <t>All qlog schemas can be serialized in many ways (e.g., JSON, CBOR, protobuf,
etc). This document describes only how to employ <xref target="JSON"/>, its subset
<xref target="I-JSON"/>, and its streamable derivative
<xref target="JSON-Text-Sequences"/>.</t>
      <section anchor="conventions-and-terminology">
        <name>Conventions and Terminology</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <t>Serialization examples in this document use JSON (<xref target="JSON"/>) unless
otherwise indicated.</t>
      </section>
      <section anchor="use-of-cddl">
        <name>Use of CDDL</name>
        <t>To define events and data structures, all qlog documents use the Concise Data
Definition Language <xref target="CDDL"/>. This document uses the basic syntax, the
specific <tt>text</tt>, <tt>uint</tt>, <tt>float32</tt>, <tt>float64</tt>, <tt>bool</tt>, and <tt>any</tt> types, as well
as the <tt>.default</tt>, <tt>.size</tt>, and <tt>.regexp</tt> control operators, the <tt>~</tt> unwrapping
operator, and the <tt>$</tt> and <tt>$$</tt> extension points syntax from <xref target="CDDL"/>.</t>
        <t>Additionally, this document defines the following custom types for
clarity:</t>
        <figure anchor="cddl-custom-types-def">
          <name>Additional CDDL type definitions</name>
          <sourcecode type="cddl"><![CDATA[
; CDDL's uint is defined as being 64-bit in size
; but for many protocol fields it is better to be restrictive
; and explicit
uint8 = uint .size 1
uint16 = uint .size 2
uint32 = uint .size 4
uint64 = uint .size 8

; an even-length lowercase string of hexadecimally encoded bytes
; examples: 82dc, 027339, 4cdbfd9bf0
; this is needed because the default CDDL binary string (bytes/bstr)
; is only CBOR and not JSON compatible
hexstring = text .regexp "([0-9a-f]{2})*"
]]></sourcecode>
        </figure>
        <t>All timestamps and time-related values (e.g., offsets) in qlog are
logged as <tt>float64</tt> in the millisecond resolution.</t>
        <t>Other qlog documents can define their own CDDL-compatible (struct) types
(e.g., separately for each Packet type that a protocol supports).</t>
        <t>The ordering of member fields in qlog CDDL type definitions is not significant.
The ordering of member fields in the serialization formats defined in this
document, JSON (<xref target="format-json"/>) and JSON Text Sequences (<xref target="format-json-seq"/>),
is not significant and qlog tools <bcp14>MUST NOT</bcp14> assume so. Other qlog serialization
formats <bcp14>MAY</bcp14> define field order significance, if they do they <bcp14>MUST</bcp14> define
requirements for qlog tools supporting those formats.</t>
        <ul empty="true">
          <li>
            <t>Note to RFC editor: Please remove the following text in this section before
publication.</t>
          </li>
        </ul>
        <t>The main general CDDL syntax conventions in this document a reader
should be aware of for easy reading comprehension are:</t>
        <ul spacing="normal">
          <li>
            <tt>? obj</tt> : this object is optional</li>
          <li>
            <tt>TypeName1 / TypeName2</tt> : a union of these two types (object can be either type 1 OR
type 2)</li>
          <li>
            <tt>obj: TypeName</tt> : this object has this concrete type</li>
          <li>
            <tt>obj: [* TypeName]</tt> : this object is an array of this type with
minimum size of 0 elements</li>
          <li>
            <tt>obj: [+ TypeName]</tt> : this object is an array of this type with
minimum size of 1 element</li>
          <li>
            <tt>TypeName = ...</tt> : defines a new type</li>
          <li>
            <tt>EnumName = "entry1" / "entry2" / entry3 / ...</tt>: defines an enum</li>
          <li>
            <tt>StructName = { ... }</tt> : defines a new struct type</li>
          <li>
            <tt>;</tt> : single-line comment</li>
          <li>
            <tt>* text =&gt; any</tt> : special syntax to indicate 0 or more fields that
have a string key that maps to any value. Used to indicate a generic
JSON object.</li>
        </ul>
        <t>All timestamps and time-related values (e.g., offsets) in qlog are
logged as <tt>float64</tt> in the millisecond resolution.</t>
        <t>Other qlog documents can define their own CDDL-compatible (struct) types
(e.g., separately for each Packet type that a protocol supports).</t>
      </section>
    </section>
    <section anchor="design-overview">
      <name>Design Overview</name>
      <t>The main tenets for the qlog design are:</t>
      <ul spacing="normal">
        <li>Streamable, event-based logging</li>
        <li>A flexible format that can reduce log producer overhead, at the cost of
increased complexity for consumers (e.g. tools)</li>
        <li>Extensible and pragmatic</li>
        <li>Aggregation and transformation friendly (e.g., the top-level element
for the non-streaming format is a container for individual traces,
group_ids can be used to tag events to a particular context)</li>
        <li>Metadata is stored together with event data</li>
      </ul>
      <t>This is achieved by a logical logging hierarchy of:</t>
      <ul spacing="normal">
        <li>
          <t>Log file
          </t>
          <ul spacing="normal">
            <li>
              <t>Trace(s)
              </t>
              <ul spacing="normal">
                <li>Event(s)</li>
              </ul>
            </li>
          </ul>
        </li>
      </ul>
      <t>An abstract LogFile class is declared (<xref target="abstract-logfile"/>), from which all
concrete log file formats derive using log file schemas. This document defines
the QLogFile (<xref target="qlog-file-schema"/>) and QLogFileSeq (<xref target="qlog-file-seq-schema"/>)
log file schemas.</t>
      <t>A trace is conceptually fluid but the conventional use case is to group events
related to a single data flow, such as a single logical QUIC connection, at a
single vantage point (<xref target="vantage-point"/>). Concrete trace definitions relate to
the log file schemas they are contained in; see (<xref target="traces"/>, <xref target="trace"/>, and
<xref target="traceseq"/>).</t>
      <t>Events are logged at a time instant and convey specific details of the logging
use case. For example, a network packet being sent or received. This document
declares an abstract Event class (<xref target="abstract-event"/>) containing common fields,
which all concrete events derive from. Concrete events are defined by event
schemas that declare or extend a namespace, which contains one or more related
event types or their extensions. For example, this document defines two event
schemas for two generic event namespaces <tt>loglevel</tt> and <tt>simulation</tt> (see
<xref target="generic-event-schema"/>).</t>
    </section>
    <section anchor="abstract-logfile">
      <name>Abstract LogFile Class</name>
      <t>A Log file is intended to contain a collection of events that are in some way
related. An abstract LogFile class containing fields common to all log files is
defined in <xref target="abstract-logfile-def"/>. Each concrete log file schema derives from
this using the CDDL unwrap operator (~) and can extend it by defining semantics
and any custom fields.</t>
      <figure anchor="abstract-logfile-def">
        <name>LogFile definition</name>
        <sourcecode type="cddl"><![CDATA[
LogFile = {
    file_schema: text
    serialization_format: text
    ? title: text
    ? description: text
    event_schemas: [+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>
      <t>The required "event_schemas" field contains event schema URIs that identify
concrete event namespaces and their associated types recorded in a log.
Requirements and guidelines are defined in <xref target="event-types-and-schema"/>.</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
    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 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"
    },
    "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": {
        "protocol_types": ["QUIC","HTTP/3"],
        "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"
      }
    }
}
<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
}
]]></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:
  * "client" indicates that this vantage point follows client data flow semantics (a
    "packet sent" event goes in the direction of the server).
  * "server" indicates that this vantage point follow server data flow semantics (a
    "packet sent" event goes in the direction of the client).
  * "unknown" indicates that the flow's direction is unknown.</t>
      <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
    ? protocol_types: ProtocolTypeList
    ? 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"/>), "protocol_type" (<xref target="protocol-type-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": { ... },

    "protocol_types":  ["QUIC","HTTP/3"],
    "group_id": "127ecc830d98f9d54a42c4f0842aa87e181a",

    "time_format": "relative_to_epoch",

    "ODCID": "127ecc830d98f9d54a42c4f0842aa87e181a"
}
]]></artwork>
      </figure>
      <section anchor="time-based-fields">
        <name>Timestamps</name>
        <t>Each event <bcp14>MUST</bcp14> include a "time" field to indicate the timestamp that it
occurred. It is a duration measured from some point in time; its units depend on the type of clock chosen and system used. Typically however, a millisecond resolution is employed.
There are several options for generating and logging timestamps, these are
governed by the ReferenceTime type (optionally included in the "reference_time"
field contained in a trace's "common_fields" (<xref target="common-fields"/>)) and TimeFormat
type (optionally included in the "time_format" field contained in the event
itself, or a trace's "common_fields").</t>
        <t>There is no requirement that events in the same trace use the same time format.
However, using a single time format for related events can make them easier to
analyze.</t>
        <t>The reference time governs from which point in time the "time" field values are measured and is defined as:</t>
        <figure anchor="reference-time-def">
          <name>ReferenceTime definition</name>
          <sourcecode type="cddl"><![CDATA[
ReferenceTime = {
    clock_type: "system" / "monotonic" / text .default "system"
    epoch: RFC3339DateTime / "unknown" .default "1970-01-01T00:00:00.000Z"

    ? wall_clock_time: RFC3339DateTime
}

RFC3339DateTime = text
]]></sourcecode>
        </figure>
        <t>The required "clock_type" field represents the type of clock used for time
measurements. The value "system" represents a clock that uses system time,
commonly measured against a chosen or well-known epoch. However, depending on the system, System time can potentially jump forward or back. In contrast, a clock using monotonic time is generally guaranteed to never go backwards. The value "monotonic" represents such a clock.</t>
        <t>The required "epoch" field is the start of the ReferenceTime. When using the
"system" clock type, the epoch field <bcp14>SHOULD</bcp14> have a date/time value using the
format defined in <xref target="RFC3339"/>. However, the value "unknown" <bcp14>MAY</bcp14> be used.</t>
        <t>When using the "monotonic" clock type, the epoch field <bcp14>MUST</bcp14> have the value
"unknown".</t>
        <t>The optional "wall_clock_time" field can be used to provide an approximate
date/time value that logging commenced at if the epoch value is "unknown". It uses
the format defined in <xref target="RFC3339"/>. Note that conversion of timestamps to
calendar time based on wall clock times cannot be safely relied on.</t>
        <t>The time format details how "time" values are encoded relative to the reference time and is defined as:</t>
        <figure anchor="time-format-def">
          <name>TimeFormat definition</name>
          <sourcecode type="cddl"><![CDATA[
TimeFormat = "relative_to_epoch" /
             "relative_to_previous_event" .default "relative_to_epoch"
]]></sourcecode>
        </figure>
        <dl>
          <dt>relative_to_epoch:</dt>
          <dd>
            <t>A duration relative to the ReferenceTime "epoch" field. This approach uses the
largest amount of characters. It is good for stateless loggers. This is the default value of the "time_format" field.</t>
          </dd>
          <dt>relative_to_previous_event:</dt>
          <dd>
            <t>A delta-encoded value, based on the previously logged value. The first event
in a trace is always relative to the ReferenceTime. This approach uses the
least amount of characters. It is suitable for stateful loggers.</t>
          </dd>
        </dl>
        <t>Events in each individual trace <bcp14>SHOULD</bcp14> be logged in strictly ascending timestamp
order (though not necessarily absolute value, for the "relative_to_previous_event"
format). Tools <bcp14>MAY</bcp14> sort all events on the timestamp before processing them,
though are not required to (as this could impose a significant processing
overhead). This can be a problem especially for multi-threaded and/or streaming
loggers, who could consider using a separate post-processor to order qlog events
in time if a tool do not provide this feature.</t>
        <t>Tools <bcp14>SHOULD NOT</bcp14> assume the ability to derive the absolute calendar timestamp of an event
from qlog traces. Tools should not rely on timestamps to be consistent across
traces, even those generated by the same logging endpoint. For reasons of
privacy, the reference time <bcp14>MAY</bcp14> have minimization or anonymization applied.</t>
        <t>Example of a log using the relative_to_epoch format:</t>
        <figure anchor="rel-epoch-time-ex">
          <name>Relative to epoch timestamps</name>
          <artwork><![CDATA[
"common_fields": {
    "time_format": "relative_to_epoch",
    "reference_time": {
          "clock_type": "system",
          "epoch": "1970-01-01T00:00:00.000Z"
    },
},
"events": [
  {
    "time": 1553986553572,
    "name": "quic:packet_received",
    "data": { ... },
  },
  {
    "time": 1553986553577,
    "name": "quic:packet_received",
    "data": { ... },
  },
  {
    "time": 1553986553587,
    "name": "quic:packet_received",
    "data": { ... },
  },
  {
    "time": 1553986553597,
    "name": "quic:packet_received",
    "data": { ... },
  },
]
]]></artwork>
        </figure>
        <t>Example of a log using the relative_to_previous_event format:</t>
        <figure anchor="rel-last-event-time-ex">
          <name>Relative-to-previous-event timestamps</name>
          <artwork><![CDATA[
"common_fields": {
    "time_format": "relative_to_previous_event",
    "reference_time": {
          "clock_type": "system",
          "epoch": "1970-01-01T00:00:00.000Z"
    },
},
"events": [
  {
    "time": 1553986553572,
    "name": "quic:packet_received",
    "data": { ... },
  },
  {
    "time": 5,
    "name": "quic:packet_received",
    "data": { ... },
  },
  {
    "time": 10,
    "name": "quic:packet_received",
    "data": { ... },
  },
  {
    "time": 10,
    "name": "quic:packet_received",
    "data": { ... },
  },
]
]]></artwork>
        </figure>
        <t>Example of a monotonic log using the relative_to_epoch format:</t>
        <figure anchor="mono-time-ex">
          <name>Monotonic timestamps</name>
          <artwork><![CDATA[
"common_fields": {
    "time_format": "relative_to_epoch",
    "reference_time": {
          "clock_type": "monotonic",
          "epoch": "unknown",
          "wall_clock_time": "2024-10-10T10:10:10.000Z"
    },
},
"events": [
  {
    "time": 0,
    "name": "quic:packet_received",
    "data": { ... },
  },
  {
    "time": 5,
    "name": "quic:packet_received",
    "data": { ... },
  },
  {
    "time": 15,
    "name": "quic:packet_received",
    "data": { ... },
  },
  {
    "time": 25,
    "name": "quic:packet_received",
    "data": { ... },
  },
]
]]></artwork>
        </figure>
      </section>
      <section anchor="path-field">
        <name>Path</name>
        <t>A qlog event can be associated with a single "network path" (usually, but not
always, identified by a 4-tuple of IP addresses and ports). In many cases, the
path will be the same for all events in a given trace, and does not need to be
logged explicitly with each event. In this case, the "path" field can be omitted
(in which case the default value of "" is assumed) or reflected in
"common_fields" instead (see <xref target="common-fields"/>).</t>
        <t>However, in some situations, such as during QUIC's Connection Migration or when
using Multipath features, it is useful to be able to split events across
multiple (concurrent) paths.</t>
        <t>Definition:</t>
        <figure anchor="path-def">
          <name>PathID definition</name>
          <sourcecode type="cddl"><![CDATA[
PathID = text .default ""
]]></sourcecode>
        </figure>
        <t>The "path" field is an identifier that is associated with a single network path.
This document intentionally does not define further how to choose this
identifier's value per-path or how to potentially log other parameters that can
be associated with such a path. This is left for other documents. Implementers
are free to encode path information directly into the PathID or to log
associated info in a separate event. For example, QUIC has the "path_assigned"
event to couple the PathID value to a specific path configuration, see
<xref target="QLOG-QUIC"/>.</t>
      </section>
      <section anchor="protocol-type-field">
        <name>ProtocolTypeList and ProtocolType</name>
        <t>An event's "protocol_types" array field indicates to which protocols (or protocol
"stacks") this event belongs. This allows a single qlog file to aggregate traces
of different protocols (e.g., a web server offering both TCP+HTTP/2 and
QUIC+HTTP/3 connections).</t>
        <figure anchor="protocol-type-def">
          <name>ProtocolTypeList and ProtocolType socket definition</name>
          <sourcecode type="cddl"><![CDATA[
ProtocolTypeList = [+ $ProtocolType]

$ProtocolType /= "UNKNOWN"
]]></sourcecode>
        </figure>
        <t>For example, QUIC and HTTP/3 events have the "QUIC" and "HTTP/3" protocol_type
entry values, see <xref target="QLOG-QUIC"/> and <xref target="QLOG-H3"/>.</t>
        <t>Typically however, all events in a single trace are of the same few protocols, and
this array field is logged once in "common_fields", see <xref target="common-fields"/>.</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,
        "protocol_types": ["TCP", "TLS", "HTTP2"],
        "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,
        "protocol_types": ["QUIC","HTTP/3"],
        "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 "path_id"),
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 "protocol_types" and
"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",
            "protocol_type": ["QUIC","HTTP/3"],
            "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",
            "protocol_type": ["QUIC","HTTP/3"],
            "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",
        "protocol_type": ["QUIC","HTTP/3"],
        "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
    ? protocol_types: ProtocolTypeList
    ? 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 Schema</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 schemas without the risk of name
collisions.</t>
      <t>A single event schema can contain exactly one of the below:
* A definition for a new event namespace
* An extension of an existing namespace (adding new events/data types and/or
  extending existing events/data types within the namespace with new fields)</t>
      <t>A single document can define multiple event schemas (for example see
<xref target="generic-event-schema"/>).</t>
      <t>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 schema 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 schema in
use. This is achieved by including the appropriate URIs in the <tt>event_schemas</tt>
field of the abstract LogFile class (<xref target="abstract-logfile"/>). 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 file might contain.
The file <bcp14>MAY</bcp14> 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 file. 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 file contains events belonging to:
* The two event namespaces defined by event schemas in this document
(<xref target="generic-event-schema"/>).
* Events in a namespace named <tt>rick</tt> specified in a hypothetical RFC
* 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>)
* Events from three private event schemas, detailing definitions for and
  extensions to two namespaces (<tt>pickle</tt> and <tt>cucumber</tt>)</t>
      <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 schema 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 schema 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 schema 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 schema continues 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 only common
"data" subfield defined in this document is the optional <tt>trigger</tt> field, see
<xref target="trigger-field"/>). An example of this setup is shown in
<xref target="protocoleventdata-def"/>.</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

    ? trigger: text

    * $$myns-event1-extension
}

MyNSEvent2 /= {
    field_2: bool

    ? trigger: text

    * $$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>Sometimes, additional information is needed in the case where a single event can
be caused by a variety of other events. In the normal case, the context of the
surrounding log messages gives a hint as to which of these other events was the
cause. However, in highly-parallel and optimized implementations, corresponding
log messages might separated in time. Another option is to explicitly indicate
these "triggers" in a high-level way per-event to get more fine-grained
information without much additional overhead.</t>
          <t>In qlog, the optional "trigger" field contains a string value describing
the reason (if any) for this event instance occurring, see
<xref target="data-field"/>. While this "trigger" field could be a property of the
qlog Event itself, it is instead a property of the "data" field instead.
This choice was made because many event types do not include a trigger
value, and having the field at the Event-level would cause overhead in
some serializations. Additional information on the trigger can be added
in the form of additional member fields of the "data" field value, yet
this is highly implementation-specific, as are the trigger field's
string values.</t>
          <t>One purely illustrative example of some potential triggers for QUIC's
"packet_dropped" event is shown in <xref target="trigger-ex"/>:</t>
          <figure anchor="trigger-ex">
            <name>Trigger example</name>
            <artwork><![CDATA[
TransportPacketDropped = {
    ? packet_type: PacketType
    ? raw_length: uint16
    ? trigger: "key_unavailable" /
               "unknown_connection_id" /
               "decrypt_error" /
               "unsupported_version"
}
]]></artwork>
          </figure>
        </section>
      </section>
      <section anchor="importance">
        <name>Event Importance Levels</name>
        <t>Depending on how events are designed, it may be that several events allow the
logging of similar or overlapping data. For example the separate QUIC
<tt>connection_started</tt> event overlaps with the more generic
<tt>connection_state_updated</tt>. In these cases, it is not always clear which event
should be logged or used, and which event should take precedence if e.g., both are
present and provide conflicting information.</t>
        <t>To aid in this decision making, qlog defines three event importance levels, in
decreasing order of importance and expected usage:</t>
        <ul spacing="normal">
          <li>Core</li>
          <li>Base</li>
          <li>Extra</li>
        </ul>
        <t>Concrete event types <bcp14>SHOULD</bcp14> define an importance level.</t>
        <t>Core-level events <bcp14>SHOULD</bcp14> be present in all qlog files for a given protocol.
These are typically tied to basic packet and frame parsing and creation, as well
as listing basic internal metrics. Tool implementers <bcp14>SHOULD</bcp14> expect and add
support for these events, though <bcp14>SHOULD NOT</bcp14> expect all Core events to be present
in each qlog trace.</t>
        <t>Base-level events add additional debugging options and <bcp14>MAY</bcp14> be present in qlog
files. Most of these can be implicitly inferred from data in Core events (if
those contain all their properties), but for many it is better to log the events
explicitly as well, making it clearer how the implementation behaves. These
events are for example tied to passing data around in buffers, to how internal
state machines change, and used to help show when decisions are actually made
based on received data. Tool implementers <bcp14>SHOULD</bcp14> at least add support for
showing the contents of these events, if they do not handle them explicitly.</t>
        <t>Extra-level events are considered mostly useful for low-level debugging of the
implementation, rather than the protocol. They allow more fine-grained tracking
of internal behavior. As such, they <bcp14>MAY</bcp14> be present in qlog files and tool
implementers <bcp14>MAY</bcp14> add support for these, but they are not required to.</t>
        <t>Note that in some cases, implementers might not want to log for example data
content details in Core-level events due to performance or privacy considerations.
In this case, they <bcp14>SHOULD</bcp14> use (a subset of) relevant Base-level events instead to
ensure usability of the qlog output. As an example, implementations that do not
log QUIC <tt>packet_received</tt> events and thus also not which (if any) ACK frames the
packet contains, <bcp14>SHOULD</bcp14> log <tt>packets_acked</tt> events instead.</t>
        <t>Finally, for event types whose data (partially) overlap with other event types'
definitions, where necessary the event definition document should include explicit
guidance on which to use in specific situations.</t>
      </section>
      <section anchor="tooling-expectations">
        <name>Tooling Expectations</name>
        <t>qlog is an extensible format and it is expected that new event schema will
emerge that define new namespaces, event types, event fields (e.g., a field
indicating an event's privacy properties), as well as values for the "trigger"
property within the "data" field, or other member fields of the "data" field, as
they see fit.</t>
        <t>It <bcp14>SHOULD NOT</bcp14> be expected that general-purpose tools will recognize or visualize
all forms of qlog extension. Tools <bcp14>SHOULD</bcp14> allow for the presence of unknown
event fields and make an effort to visualize even unknown data if possible,
otherwise they <bcp14>MUST</bcp14> ignore it.</t>
      </section>
      <section anchor="further-design-guidance">
        <name>Further Design Guidance</name>
        <t>There are several ways of defining concrete event types. In practice, two main
types of approach have been observed: a) those that map directly to concepts
seen in the protocols (e.g., <tt>packet_sent</tt>) and b) those that act as aggregating
events that combine data from several possible protocol behaviors or code paths
into one (e.g., <tt>parameters_set</tt>). The latter are typically used as a means to
reduce the amount of unique event definitions, as reflecting each possible
protocol event as a separate qlog entity would cause an explosion of event
types.</t>
        <t>Additionally, logging duplicate data is typically prevented as much as possible.
For example, packet header values that remain consistent across many packets are
split into separate events (for example <tt>spin_bit_updated</tt> or
<tt>connection_id_updated</tt> for QUIC).</t>
        <t>Finally, when logging additional state change events, those state changes can
often be directly inferred from data on the wire (for example flow control limit
changes). As such, if the implementation is bug-free and spec-compliant, logging
additional events is typically avoided. Exceptions have been made for common
events that benefit from being easily identifiable or individually logged (for
example <tt>packets_acked</tt>).</t>
      </section>
    </section>
    <section anchor="generic-event-schema">
      <name>The Generic Event Schemas</name>
      <t>The two following generic event schemas define two namespaces and several
concrete event types that are common across protocols, applications, and use
cases.</t>
      <section anchor="loglevel-events">
        <name>Loglevel events</name>
        <t>In typical logging setups, users utilize a discrete number of well-defined
logging categories, levels or severities to log freeform (string) data. The
loglevel event namespace replicates this approach to allow implementations to
fully replace their existing text-based logging by qlog. This is done by
providing events to log generic strings for the typical well-known logging
levels (error, warning, info, debug, verbose). The namespace identifier is
"loglevel". The event schema URI is <tt>urn:ietf:params:qlog:events:loglevel</tt>.</t>
        <figure anchor="loglevel-events-def">
          <name>LogLevelEventData and ProtocolEventData extension</name>
          <sourcecode type="cddl"><![CDATA[
LogLevelEventData = LogLevelError /
                    LogLevelWarning /
                    LogLevelInfo /
                    LogLevelDebug /
                    LogLevelVerbose

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Command: QLOGDIR=/srv/qlogs/ quicserverbinary

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

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

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

Note to Readers

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

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

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

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

Note to Readers

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

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

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-h3-events-08"/>
        </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 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-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:
H4sIAAAAAAAAA+296XYb2ZUu+P88RRTkXiLTADhoSInpdBVTUjrp0mRR6Wzf
dC4xAATJsAAEMiIgClbJz9J/+x36V98X6/3t4QwBgKKc9q17b1ctVwoEIs64
zz57/PZgMHBt2U6Lo6z387S6OMpO23o5bpd1McmeVhcX5fwiO6/q7HnRXlX1
2+xlXbXVuJo2PZePRnXx7ijDe25Sjef5jJqZ1Pl5OyiL9nzw87IcD/DrYJaX
80Ezvixm+eBg343ztrio6tVR1rQT58pFfZRRt017uL//cP/Q5XWRH2Wv63ze
LKq6dej5oq6Wi6PsD9+fPHJvixV9NTnKTuZtUc+LdvAYvTrXtPl88iafVnMa
yapo3KI8yn6kAfczGmA5nxTztp811GZdnDf0aTXTD21djumncTVb5PphRg/T
T+V8Ws6Ln5zLl+1lVR+5LBvQ/2f0Q3OUvRpmz/L6PX8hC/CqGpXz8GVV06Ie
v81pCfhvWoJyepTVM3rg33L+fkid8W91hY0oJmVb1Wk3T4fZ83JM617Oy6iv
p8tx3vmB+3tWtHnc23Ruz/zbjH66QYfPhtlpQW/P51F3NKm2mCc/aAcz/qWR
H/7tAl9u7cTP6GVeT5ZFZzpN/DVP5tG0Wk7Op0QUyZTw7L/xfxf8wub+3Lyi
pW7Ld8UREdr8PPyVZX94+uJ3AxDUEb93Mng87NAtfyregRCcvfDdna2PX96J
Hj5+/uqHweH+4b483ub1RdEeZZdtu2iO9vbwwrCYzIbLy7xpimk7HBV7+by+
2pPH9VA+LkZLOYUYaEbknX33+vXLvTvZVdle8tnjL39+V9KRxJsTOlxHGToe
7D/kbwLh2hZvodX0x2f5+3JWZC/LOl9u+v1lQYcv+8My3/TjD+Use5rPqrYt
nHODwSDLR3TI6Gw5x4Ne1NW7clI0WfEelFOOpgVOofGeacR75sp7FsZ7+lk+
nVZX+rsr8maVNZd5jS+qc6xAnrWXeZuNinlxXrYNH+dqnk2wmrxe+Tyfrpqy
yeg8XFaTBl+6tsIZuRhmry/pF+IYS/AAeqsZ1+WIxkqMh5qaj4sFtUk9CcsU
oqJRnZfTgv7BNOlfJ7TQ5/50ljSGRVXSt9YHDW9etvi+nI+nSyxIe1lkl+XF
5WBKDUyxEtywE/6p7V3QzIhlZdxHpj8Ns1cFUWNdMOuS55a0yGBgDS/lmDhr
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
d9xMCdR20GOwM3vwO1j487iNR2QcOKKFdJ0Z9dvsDjJ86R12aR3+H2aDm8Iu
wVFgbV3BIjnhpw/2YUR8fgywi1GJE4+q69rFjTbqmvuueyyjbZIIomibttyB
0ZLLyn1qY/Spjduio+gUvryVvcqv1iMb4oCyD7fq/IqlRr4TS6vjpghSPjYx
lTU4JkaAeqUKIdvs4GEyWyz8u46aFkNgOUN5t6jfUIx0tEI5Mw6tEqsUf6Gh
Y50SHZLrEBsVy/k7FOkSeznfcUtWJmTOFnRt9vCM9TS6qmfsKXBc1ZI+7GFd
uAENy2uSimMRMKy5bzUQyPvg+mwg5aAeEg28+xSXqoJfchgJXboKTpc8Yi4p
McqN6epuV3AtwyWgaWf6CGcl/SA+EDG/jVQuSMcYYZ7mzozLfR/+2bfEX4Zq
6tE+9TyYJZEMlAWVC3Gpx25FEnYKrTnXV+s3LMY1MSKGnkOwUr6aVjkD8CJi
zCzCXrzipLzoLGmHfIT4dGgY/RKlfQN1eOgJcQQoW1Dipo1l2t7tawsBh827
R3S04gjWAesRjUP7SPGNRrF1APAkykSty+L91i5BmGmP+u6b7T3vxIVfSXxn
JMvJbjc6Q9ZJxrQ++XjOOqpVdygQiY7oyfdaBy0wH2MNMc+x3eqgK196wjmK
MjlVyvSj57Nr1M5GWSF2K6TUhFQ8fUOSBVEgaEP5Zd2XiOh0Pe0oiO/biVYU
1QQpGP8hDMv4z5VP/j1nVmFxKDY8ht5IQIEMRsTEFXOv68rbeAIBpCPk0Irg
K/SQorpD/U4zup6kiEDCaSUQv1mOGBXQYrS7SyF4ZrZa6gmNewzHVw+VBtwe
Pzl+nLX5xW5/e3hBN5RPixab5pkM39m4JWSRlDQNesYS862DOkHiixjIVQFN
jX9J8uVMKuukeTIcZFKMOb+Y0z2EeufVenk/NC9cTkPB6UCpKq0FolMnlAVi
IaC5TQonx+WleLSJ42vNFaq1PkUeCqWBdvtRgKMGxaZzEPYzQ3knKPIbJsR1
+7QVjnOLEhB4tYbIaSKCtSinGO1U/am5wS/NnQrfm1ZOfPAWhKxGCdt+GaME
hrFuN5a4sNONLXEowbioOfyPaHFSII8H4X1XBZ9H1arp1poW70v9Y03pVtxg
FMIsoQyvF4KMY2/lymTJPol2Eh7AlV/FLCCj7NZxrEJAQ7wiXBGknz365sUr
+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

-->

</rfc>
