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

megathread: Buffer exporting and logging #9700

Open
12 tasks
zadjii-msft opened this issue Apr 3, 2021 · 4 comments
Open
12 tasks

megathread: Buffer exporting and logging #9700

zadjii-msft opened this issue Apr 3, 2021 · 4 comments
Labels
Area-Settings Issues related to settings and customizability, for console or terminal Area-TerminalControl Issues pertaining to the terminal control (input, selection, keybindings, mouse interaction, etc.) Area-User Interface Issues pertaining to the user interface of the Console or Terminal Issue-Scenario Product-Terminal The new Windows Terminal.
Milestone

Comments

@zadjii-msft
Copy link
Member

zadjii-msft commented Apr 3, 2021

[Original thread: #642] [Spec: #11090 {in progress}] [#11062]

This thread is being used to track all the component work for buffer logging and exporting.

2.0 Bugs

Buffer exporting

This is the easier work to do. #11062 already wires up the TerminalApp to retrieve the buffer contents from the TermControl, so writing them at request is easy.

  • I think the path should just be a single setting, a file path, rather than two settings, directory and filename. When we have formatted paths, then that's both settings in one line.
  • Add an exportBuffer() action that opens the file picker
  • Add a string path parameter to exportBuffer() that allows the user to press a key and immediately export the buffer to a whole path
    • default to "", which indicates "open the file picker"
  • add a boolean append (default to false) parameter to exportBuffer. When true, export to the file given by appending, not overwriting the file
  • Enable string formatting in the path parameter.
    • What format do we want? yyyy-mm-dd? %Y-%m-%D? &Y-&m-&D? {year}-{month}-{day}?
    • What are all the variables we want?
      • Year, month, day, hour, minute - those are easy
      • WT_SESSION, for a uuid for eash session maybe?
      • Profile name perhaps? Commandline?
  • more...

Automatic logging

This is harder. We don't want the TermControl telling the TerminalApp layer about every piece of output logged. That would be insane, especially in the post-#5000 world where that's a cross-process hop. Instead, we'll want the ControlCore/ControlInteractivity to do logging themselves. I suppose that this should have been tracked in #3044 separately from #642, but here we are.

  • toggleLogging() Action for start/stop logging, with path, append properties (like exportBuffer())
    • ToggleLoggingArgs contains a single member LoggingSettings, which contains path and append properties. This will make sense below.
  • add LoggingSettings property for "log all output" (default would just be "log printable output")
  • add LoggingSettings property for "log input" (Though, we'd probably want to log it as normal VT encoded, not as win32-input encoded)
  • Per-profile setting for "auto logging", which would log by default when the profile is opened Terminal Output Logging Functionality #14018
    • So we want to have a profile have both "logging settings" and a "log automatically" property? So "start logging" on a profile that has logging settings, but doesn't log automatically would just use the profile's settings? e.g.:
{
  "actions": [
    { "command": "toggleLogging" }
  ],
  "profiles": [
    {
      "name": "foo",
      "logging": { "path": "c:\foo.txt", "append": true },
      "automaticallyLog": false
    }
  ]
}
  • LoggingSettings property for "New file every day", which only works when the {day} is in the path string. When auto-logging with this setting, opens a new file at midnight and starts writing that one.
  • LoggingSettings property for "Flush log frequently", defaults to true(?). This causes us to flush all output to the file, instead of just... on close? on newline? It's unclear exactly when PuTTY flushes with this off. Need more coffee.

Initially I thought it might be nice to have LoggingSettings be the same for exportBuffer() and profile.logging. But newFileEveryDay and flushFrequently don't make sense for exportBuffer(). Though I guess they do make sense for toggleLogging()

Reference

PuTTY logging settings

image
See also: https://tartarus.org/~simon/putty-snapshots/htmldoc/Chapter4.html#config-logfilename

SecureCRT logging settings

image

@ghost ghost added Needs-Triage It's a new issue that the core contributor team needs to triage at the next triage meeting Needs-Tag-Fix Doesn't match tag requirements labels Apr 3, 2021
@zadjii-msft zadjii-msft added ⛺ Reserved For future use and removed Needs-Triage It's a new issue that the core contributor team needs to triage at the next triage meeting labels Apr 3, 2021
@zadjii-msft zadjii-msft changed the title <reserved> megathread: Buffer exporting and logging Aug 31, 2021
@zadjii-msft zadjii-msft added Area-Settings Issues related to settings and customizability, for console or terminal Area-TerminalControl Issues pertaining to the terminal control (input, selection, keybindings, mouse interaction, etc.) Area-User Interface Issues pertaining to the user interface of the Console or Terminal Issue-Scenario Product-Terminal The new Windows Terminal. and removed Needs-Tag-Fix Doesn't match tag requirements ⛺ Reserved For future use labels Sep 1, 2021
@zadjii-msft zadjii-msft added this to the Terminal Backlog milestone Sep 1, 2021
ghost pushed a commit that referenced this issue Oct 1, 2021
Just like in #9760, we can't actually use the UWP file picker API, because it will absolutely not work at all when the Terminal is running elevated. That would prevent the picker from appearing at all. So instead, we'll just use the shell32 one manually. 

This also gets rid of the confirmation dialog, since the team felt we didn't really need that. We could maybe replace it with a Toast (#8592), but _meh_

* [x] closes #11356
* [x] closes #11358
* This is a lot like #9760
* introduced in #11062
* megathread: #9700
ghost pushed a commit that referenced this issue Jan 12, 2022
This adds an action for the context menu entry we added in #11062. That PR added support for exporting the buffer, exclusively through the tab item's context menu. This adds an action that can additionally be bound, which also can export the buffer to a file. This action accepts a `path` param. If empty/ommitted, then the Terminal will prompt for the file to export the buffer to. 

* Does a part of #9700
* Spec in #11090, but I doubt this is contentious
* [x] This will satisfy #12052
* [x] I work here
* [x] docs added: MicrosoftDocs/terminal#479
@zadjii-msft zadjii-msft added this to Spec Needed ❓ in Specification Tracker via automation Feb 22, 2023
@zadjii-msft zadjii-msft moved this from Spec Needed ❓ to Spec In Review ⏰ in Specification Tracker Feb 22, 2023
@siliyuan6
Copy link

siliyuan6 commented Sep 27, 2023

Can anyone teach me how to configure it? Why is the log file not automatically generated after I configured it? Are you modifying setting.json?Thank you all. My version is v1.17.11461.0

@zadjii-msft
Copy link
Member Author

Why is the log file not automatically generated after I configured it?

Because this feature isn't actually implemented yet. What's in the OP was my spec-in-progress, which got turned into the draft spec over at #11090

@yuahualove
Copy link

will this feature be added next release version?

@zadjii-msft
Copy link
Member Author

@yuahualove Which feature? This megathread is tracking both exporting and auto-logging.

  • Buffer exporting has shipped since like, v1.12.
  • Auto-logging only ever had a rough spec draft, and hasn't been committed to any particular milestones.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Area-Settings Issues related to settings and customizability, for console or terminal Area-TerminalControl Issues pertaining to the terminal control (input, selection, keybindings, mouse interaction, etc.) Area-User Interface Issues pertaining to the user interface of the Console or Terminal Issue-Scenario Product-Terminal The new Windows Terminal.
Projects
Specification Tracker
  
Spec In Review ⏰
Development

No branches or pull requests

3 participants