datalust / seqcli

The Seq command-line client. Administer, log, ingest, search, from any OS.
https://datalust.co/seq
Apache License 2.0
147 stars 21 forks source link

Allow option to retain ANSI color codes when output is piped #239

Open damianpowell opened 2 years ago

damianpowell commented 2 years ago

In PowerShell Core (pwsh), the following command outputs human readable logs, in colour:

Get-Content .\upgrade-assistant.clef  | seqcli print

image

However, if I want to view this at the command line using something like less then the ANSI colour codes are stripped out:

Get-Content .\upgrade-assistant.clef  | seqcli print | less

image

I assume seqcli strips out ANSI control codes when the output is being piped or redirected in order to be friendly to consumers further down the pipe. It would be great if we could force seqcli print to emit the ANSI colour codes in some circumstances, particularly interactive console sessions. Perhaps a positive version of --no-color with an interactive-friendly shorthand version?

Get-Content .\upgrade-assistant.clef  | seqcli print --color | less

or

Get-Content .\upgrade-assistant.clef  | seqcli print -c | less

It would be great if this could be implemented in clef-tool too, but I understand where the activity is...

nblumhardt commented 2 years ago

Thanks for the suggestion! Perhaps --force-color would make the behavior of the flag slightly clearer?

The print command works by pushing events through Serilog.Sinks.Console, which already accepts an applyThemeToRedirectedOutput flag.

Along with specifying this, --force-color would also have to specify an ANSI console theme (on Windows, Serilog.Sinks.Console doesn't use ANSI codes by default).

Open to a PR, if anyone's able to take a look.