OPENSSL-QLOG(7ossl)
π OPENSSL-QLOG β the qlog thing, explained
okay so this is the openssl-qlog(7ossl) page, aka everything you need to know about OpenSSL's qlog tracing era. buckle up bestie π
β¨ NAME β¨
openssl-qlog β OpenSSL's qlog tracing functionality. that's it, that's the name, and honestly it's giving "quietly powerful" π
π¦ DESCRIPTION π¦
So here's the tea: OpenSSL has unstable support for generating logs in the qlog logging format, and you use it to get diagnostic data for QUIC connections. The data it spits out includes info on packets sent and received, the frames contained inside them, plus loss detection and other events. like, it's literally watching everything π
The qlog output OpenSSL generates can be used to get diagnostic visualisations of a given QUIC connection using tools such as qvis. cute and functional, we love that for us π
WARNING: the output of OpenSSL's qlog functionality uses an unstable format based on a draft specification. qlog output is not subject to any format stability or compatibility guarantees at this time, and will change in incompatible ways in future versions of OpenSSL. See FORMAT STABILITY below for the details. no cap, read that part π
πΈ USAGE πΈ
When OpenSSL is built with qlog support, qlog gets enabled at run time by setting the standard QLOGDIR environment variable to point to a directory where qlog files should be written. Once that's set, any QUIC connection established by OpenSSL will automatically have a qlog file written to that directory. automatic. effortless. main character energy β¨
Log files are generated in the .sqlog format based on JSON-SEQ (RFC 7464).
The filenames of generated log files under the specified QLOGDIR use this structure:
{connection_odcid}_{vantage_point_type}.sqlog
where {connection_odcid} is the lowercase hexadecimal encoding of a QUIC connection's Original Destination Connection ID β which is the Destination Connection ID used in the header of the first Initial packet sent as part of the connection process β and {vantage_point_type} is either "client" or "server", reflecting the perspective of the endpoint producing the qlog output. so you always know who's telling the story π«Ά
The qlog functionality can be disabled at OpenSSL build time using the no-unstable-qlog configure flag. iykyk.
π₯ SUPPORTED EVENT TYPES π₯
The following event types are currently supported β here's the whole roster, no gatekeeping:
connectivity:connection_started
connectivity:connection_state_updated
connectivity:connection_closed
transport:parameters_set
transport:packet_sent
transport:packet_received
recovery:packet_lost
π FILTERS π
By default, all supported event types are logged. The OSSL_QFILTER environment variable can be used to configure a filter specification, which determines which event types are to be logged. Each event type can be turned on and off individually. The filter specification is a space-separated list of terms listing event types to enable or disable. The terms are applied in order, so the effects of later terms override the effects of earlier terms. order matters, bestie β it's literally a stack of vibes π
π Examples π
Here are some example filter specifications:
"*"(or"+*") β enable all supported qlog event types. everything, all at once π"-*"β disable all qlog event types. silence. peace. π"* -transport:packet_received"β enable all qlog event types, but disable thetransport:packet_receivedevent type."-* transport:packet_sent"β disable all qlog event types, except for thetransport:packet_sentevent type. one icon standing π"-* connectivity:* transport:parameters_set"β disable all qlog event types, except fortransport:parameters_setand all supported event types in theconnectivitycategory.
π§ Filter Syntax Specification π§
Formally, the format of the filter specification in ABNF is as follows:
filter = *filter-term
filter-term = add-sub-term
add-sub-term = ["-" / "+"] specifier
specifier = global-specifier / qualified-specifier
global-specifier = wildcard
qualified-specifier = component-specifier ":" component-specifier
component-specifier = name / wildcard
wildcard = "*"
name = 1*(ALPHA / DIGIT / "_" / "-")
Filter terms are interpreted as follows:
"+*"(or"*") β enables all event types."-*"β disables all event types."+foo:*"(or"foo:*") β enables all event types in thefoocategory."-foo:*"β disables all event types in thefoocategory."+foo:bar"(or"foo:bar") β enables a specific event typefoo:bar."-foo:bar"β disables a specific event typefoo:bar.
Partial wildcard matches are not supported at this time. sorry bestie, no foo:b* shenanigans π
π Default Configuration π
If the OSSL_QFILTER environment variable is not set or set to the empty string, this is equivalent to enabling all event types (i.e., it is equivalent to a filter of "*"). Note that the QLOGDIR environment variable must also be set to enable qlog. both, or nothing, that's the rule π«Ά
β FORMAT STABILITY β
okay this is the serious part, so listen up.
The OpenSSL qlog functionality currently implements a draft version of the qlog specification. Future revisions to the qlog specification in advance of formal standardisation are expected to introduce incompatible and breaking changes to the qlog format. The OpenSSL qlog functionality will transition to producing output in this format in the future once standardisation is complete.
Because of this, the qlog output of OpenSSL will change in incompatible and breaking ways in the future, including in non-major releases of OpenSSL. The qlog output of OpenSSL is considered unstable and not subject to any format stability or compatibility guarantees at this time.
Users of the OpenSSL qlog functionality must be aware that the output may change arbitrarily between releases and that the preservation of compatibility with any given tool between releases is not guaranteed. read it and weep (or don't, just pin your versions π )
π Aims π
The OpenSSL draft qlog functionality is primarily intended for use in conjunction with the qvis tool https://qvis.quictools.info/. In terms of format compatibility, the output format of the OpenSSL qlog functionality is expected to track what is supported by qvis. As such, future changes to the output of the OpenSSL qlog functionality are expected to track changes in qvis as they occur, and reflect the versions of qlog currently supported by qvis. basically: we follow qvis's lead, periodt β¨
This means that prior to the finalisation of the qlog standard, in the event of a disparity between the current draft and what qvis supports, the OpenSSL qlog functionality will generally aim for qvis compatibility over compliance with the latest draft.
As such, OpenSSL's qlog functionality currently implements qlog version 0.3 as defined in draft-ietf-quic-qlog-main-schema-05 and draft-ietf-quic-qlog-quic-events-04. These revisions are intentionally used instead of more recent revisions due to their qvis compatibility. intentional. iconic. π
π LIMITATIONS π
The OpenSSL implementation of qlog currently has the following limitations:
- Not all event types defined by the draft specification are implemented.
- Only the JSON-SEQ (
.sqlog) output format is supported. - Only the
QLOGDIRenvironment variable is supported for configuring the qlog output directory. The standardQLOGFILEenvironment variable is not supported. - There is no API for programmatically enabling or controlling the qlog functionality.
no API bestie, you gotta go through the environment like everyone else π
πΈ SEE ALSO πΈ
openssl-quic(7), openssl-env(7)
go read those too, they're slay π«Ά
π HISTORY π
This functionality was added in OpenSSL 3.3.
π COPYRIGHT π
Copyright 2024 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the Apache License 2.0 (the "License"). You may not use this file except in compliance with the License. You can obtain a copy in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.
that's the whole page bestie, and for the record this was OpenSSL 3.5.6, dated 2026-04-07 β go forth and trace those QUIC connections π β¨π¦
π¦ where this page comes from
- freebsd 15.1: base 15.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms