Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Generate qlog traces #406

Open
Ralith opened this issue Jul 22, 2019 · 8 comments
Open

Generate qlog traces #406

Ralith opened this issue Jul 22, 2019 · 8 comments
Labels
enhancement New feature or request good first issue Good for newcomers help wanted Extra attention is needed interop Interop test / related feature

Comments

@Ralith
Copy link
Collaborator

Ralith commented Jul 22, 2019

qlog is a draft standard for encoding protocol event traces. It might be useful for Quinn to have conditionally compiled support for generating qlog traces to debug complex behavior using qlog-oriented tooling.

@Ralith Ralith added enhancement New feature or request help wanted Extra attention is needed labels Jul 22, 2019
@stammw stammw added the interop Interop test / related feature label Apr 9, 2020
@stammw
Copy link
Contributor

stammw commented Apr 9, 2020

Adding an interop tag here because qlog generation is part of the interop listed test under L.

There is an existing qlog implementation that we could integrate.

@djc
Copy link
Member

djc commented Apr 9, 2020

That would make sense, I think!

@Ralith Ralith added the good first issue Good for newcomers label Apr 9, 2020
@Ralith
Copy link
Collaborator Author

Ralith commented Apr 9, 2020

Awesome find! That'll make this a lot easier.

@euberdeveloper
Copy link

Any news on this?

@Ralith
Copy link
Collaborator Author

Ralith commented Dec 20, 2021

Nobody's taken it on yet.

@kixelated
Copy link

kixelated commented Sep 21, 2023

I'll implement this eventually. qlog was instrumental for debugging and diagnosing congestion control in my (closed source) QUIC implementation.

qlog traces are MASSIVE even with gzip, which also uses a lot of CPU. You would need the ability to enable qlog on a per-connection basis, and it has to be done early so you don't drop those initial events.

I was thinking:

/// Enable logging for events that could not be associated with a connection (ex. unknown packets)
Endpoint::enable_qlog(w: AsyncWrite)

/// Enable logging for all events associated with this connection
Connecting::enable_qlog(w: AsyncWrite)

Most of the events will be emitted inside a Mutex and a a blocking filesystem write would be devastating. AsyncWrite is used mostly so the compiler would catch those.

A filter would also be cool, as most qlog events/fields are optional and some are very verbose. For example, you can emit base64 encoded packet/steam contents with the raw field, but that's extremely situational. It's not as simple as a verbosity level because the most verbose events are often unrelated.

@Ralith
Copy link
Collaborator Author

Ralith commented Sep 26, 2023

Note qvis reportedly does not plan to implement qlog 0.4; they're sticking with 0.3 until a 1.0 RC is specced.

You would need the ability to enable qlog on a per-connection basis

I'm not sure about this. I'd imagine usually you're either spinning up an endpoint purely for testing, or don't want qlog at all.

@marcblanchet
Copy link

support. very useful for interop and special uses. would love to get

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request good first issue Good for newcomers help wanted Extra attention is needed interop Interop test / related feature
Projects
None yet
Development

No branches or pull requests

6 participants