Skip to content

Commit

Permalink
Merge pull request #240 from damianpowell/dev
Browse files Browse the repository at this point in the history
Colourise Redirected Output
  • Loading branch information
nblumhardt authored May 27, 2022
2 parents 75e4ea1 + 0bc84f7 commit f1024b9
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 7 deletions.
18 changes: 16 additions & 2 deletions src/SeqCli/Cli/Commands/PrintCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,13 @@ class PrintCommand : Command
readonly InvalidDataHandlingFeature _invalidDataHandlingFeature;

string _filter, _template = OutputFormatFeature.DefaultOutputTemplate;
bool _noColor;
bool _noColor, _forceColor;

public PrintCommand(SeqCliOutputConfig outputConfig)
{
if (outputConfig == null) throw new ArgumentNullException(nameof(outputConfig));
_noColor = outputConfig.DisableColor;
_forceColor = outputConfig.ForceColor;

_fileInputFeature = Enable(new FileInputFeature("CLEF file to read", supportsWildcard: true));

Expand All @@ -55,17 +56,30 @@ public PrintCommand(SeqCliOutputConfig outputConfig)
_invalidDataHandlingFeature = Enable<InvalidDataHandlingFeature>();

Options.Add("no-color", "Don't colorize text output", v => _noColor = true);

Options.Add("force-color",
"Force redirected output to have ANSI color (unless `--no-color` is also specified)",
v => _forceColor = true);
}

protected override async Task<int> Run()
{
var applyThemeToRedirectedOutput
= _noColor == false && _forceColor == true;

var theme
= _noColor ? ConsoleTheme.None
: applyThemeToRedirectedOutput ? OutputFormatFeature.DefaultAnsiTheme
: OutputFormatFeature.DefaultTheme;

var outputConfiguration = new LoggerConfiguration()
.MinimumLevel.Is(LevelAlias.Minimum)
.Enrich.With<RedundantEventTypeRemovalEnricher>()
.Enrich.With<SurrogateLevelRemovalEnricher>()
.WriteTo.Console(
outputTemplate: _template,
theme: _noColor ? ConsoleTheme.None : OutputFormatFeature.DefaultTheme);
theme: theme,
applyThemeToRedirectedOutput: applyThemeToRedirectedOutput);

if (_filter != null)
outputConfiguration.Filter.ByIncludingOnly(_filter);
Expand Down
23 changes: 18 additions & 5 deletions src/SeqCli/Cli/Features/OutputFormatFeature.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,18 +34,25 @@ class OutputFormatFeature : CommandFeature
public const string DefaultOutputTemplate =
"[{Timestamp:o} {Level:u3}] {Message:lj} {Properties:j}{NewLine}{Exception}";

public static readonly ConsoleTheme DefaultTheme = SystemConsoleTheme.Literate;
public static readonly ConsoleTheme DefaultTheme = SystemConsoleTheme.Literate;
public static readonly ConsoleTheme DefaultAnsiTheme = AnsiConsoleTheme.Code;

bool _json, _noColor;
bool _json, _noColor, _forceColor;

public OutputFormatFeature(SeqCliOutputConfig outputConfig)
{
_noColor = outputConfig.DisableColor;
_forceColor = outputConfig.ForceColor;
}

public bool Json => _json;

ConsoleTheme Theme => _noColor ? ConsoleTheme.None : DefaultTheme;
bool ApplyThemeToRedirectedOutput => _noColor == false && _forceColor == true;

ConsoleTheme Theme
=> _noColor ? ConsoleTheme.None
: ApplyThemeToRedirectedOutput ? DefaultAnsiTheme
: DefaultTheme;

public override void Enable(OptionSet options)
{
Expand All @@ -55,6 +62,10 @@ public override void Enable(OptionSet options)
v => _json = true);

options.Add("no-color", "Don't colorize text output", v => _noColor = true);

options.Add("force-color",
"Force redirected output to have ANSI color (unless `--no-color` is also specified)",
v => _forceColor = true);
}

public Logger CreateOutputLogger()
Expand All @@ -72,7 +83,8 @@ public Logger CreateOutputLogger()
outputConfiguration.Enrich.With<SurrogateLevelRemovalEnricher>();
outputConfiguration.WriteTo.Console(
outputTemplate: DefaultOutputTemplate,
theme: Theme);
theme: Theme,
applyThemeToRedirectedOutput: ApplyThemeToRedirectedOutput);
}

return outputConfiguration.CreateLogger();
Expand Down Expand Up @@ -115,7 +127,8 @@ public void WriteEntity(Entity entity)
.Enrich.With<StripStructureTypeEnricher>()
.WriteTo.Console(
outputTemplate: "{@Message:j}{NewLine}",
theme: Theme)
theme: Theme,
applyThemeToRedirectedOutput: ApplyThemeToRedirectedOutput)
.CreateLogger();
writer.Information("{@Entity}", jo);
}
Expand Down
1 change: 1 addition & 0 deletions src/SeqCli/Config/SeqCliOutputConfig.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,6 @@ namespace SeqCli.Config
class SeqCliOutputConfig
{
public bool DisableColor { get; set; }
public bool ForceColor { get; set; }
}
}

0 comments on commit f1024b9

Please sign in to comment.