diff --git a/source/Nuke.CodeGeneration/Generators/DataClassGenerator.cs b/source/Nuke.CodeGeneration/Generators/DataClassGenerator.cs index b7c16549e..204889813 100644 --- a/source/Nuke.CodeGeneration/Generators/DataClassGenerator.cs +++ b/source/Nuke.CodeGeneration/Generators/DataClassGenerator.cs @@ -99,7 +99,7 @@ private static DataClassWriter WriteProcessCustomLogger(this DataClassWriter wri var tool = writer.DataClass.Tool; var logger = $"{tool.GetClassName()}.{tool.Name}Logger"; - return writer.WriteLine($"public override Action ProcessCustomLogger => {logger};"); + return writer.WriteLine($"public override Action ProcessCustomLogger => base.ProcessCustomLogger ?? {logger};"); } private static void WritePropertyDeclaration(DataClassWriter writer, Property property) diff --git a/source/Nuke.CodeGeneration/Generators/TaskGenerator.cs b/source/Nuke.CodeGeneration/Generators/TaskGenerator.cs index 0af0a42bc..c8db4390e 100644 --- a/source/Nuke.CodeGeneration/Generators/TaskGenerator.cs +++ b/source/Nuke.CodeGeneration/Generators/TaskGenerator.cs @@ -51,7 +51,8 @@ private static void WriteGenericTask(this ToolWriter writer) "int? timeout = null", "bool? logOutput = null", "bool? logInvocation = null", - "Func outputFilter = null" + "Func outputFilter = null", + "Action customLogger = null" }; var arguments = new[] { @@ -62,7 +63,7 @@ private static void WriteGenericTask(this ToolWriter writer) "timeout", "logOutput", "logInvocation", - $"{tool.Name}Logger", + $"customLogger ?? {tool.Name}Logger", "outputFilter" }; writer diff --git a/source/Nuke.Common/Tooling/ToolSettings.Standard.cs b/source/Nuke.Common/Tooling/ToolSettings.Standard.cs index d5082c4ab..498e29581 100644 --- a/source/Nuke.Common/Tooling/ToolSettings.Standard.cs +++ b/source/Nuke.Common/Tooling/ToolSettings.Standard.cs @@ -164,5 +164,15 @@ public static T SetProcessArgumentConfigurator(this T toolSettings, [CanBeNul newToolSettings.ProcessArgumentConfigurator = argumentConfigurator; return newToolSettings; } + + ///Sets -- + [Pure] + public static T SetProcessCustomLogger(this T toolSettings, [CanBeNull] Action customLogger) + where T : ToolSettings + { + var newToolSettings = toolSettings.NewInstance(); + newToolSettings.ProcessCustomLogger = customLogger; + return newToolSettings; + } } } diff --git a/source/Nuke.Common/Tooling/ToolSettings.cs b/source/Nuke.Common/Tooling/ToolSettings.cs index c743dc45a..b24e91204 100644 --- a/source/Nuke.Common/Tooling/ToolSettings.cs +++ b/source/Nuke.Common/Tooling/ToolSettings.cs @@ -31,7 +31,7 @@ protected ToolSettings() public bool? ProcessLogOutput { get; internal set; } public bool? ProcessLogInvocation { get; internal set; } - public abstract Action ProcessCustomLogger { get; } + public virtual Action ProcessCustomLogger { get; internal set; } [NonSerialized] private Func _processArgumentConfigurator = x => x; diff --git a/source/Nuke.Common/Tools/Docker/CliSettings.cs b/source/Nuke.Common/Tools/Docker/CliSettings.cs index 70da14e5a..17212c376 100644 --- a/source/Nuke.Common/Tools/Docker/CliSettings.cs +++ b/source/Nuke.Common/Tools/Docker/CliSettings.cs @@ -15,6 +15,6 @@ public Arguments CreateArguments() return ConfigureProcessArguments(new Arguments()); } - public override Action ProcessCustomLogger => throw new NotSupportedException(); + public override Action ProcessCustomLogger => base.ProcessCustomLogger ?? throw new NotSupportedException(); } } diff --git a/source/Nuke.Common/Tools/Helm/HelmCommonSettings.cs b/source/Nuke.Common/Tools/Helm/HelmCommonSettings.cs index ac4c2ffee..1f8f2fa81 100644 --- a/source/Nuke.Common/Tools/Helm/HelmCommonSettings.cs +++ b/source/Nuke.Common/Tools/Helm/HelmCommonSettings.cs @@ -15,6 +15,6 @@ internal Arguments CreateArguments() return ConfigureProcessArguments(new Arguments()); } - public override Action ProcessCustomLogger { get; } + public override Action ProcessCustomLogger { get; internal set; } } } diff --git a/source/Nuke.Common/Tools/Helm/HelmToolSettings.cs b/source/Nuke.Common/Tools/Helm/HelmToolSettings.cs index cf09fbedb..dae0bffd5 100644 --- a/source/Nuke.Common/Tools/Helm/HelmToolSettings.cs +++ b/source/Nuke.Common/Tools/Helm/HelmToolSettings.cs @@ -18,7 +18,7 @@ public class HelmToolSettings : ToolSettings /// public HelmCommonSettings CommonSettings { get; internal set; } - public override Action ProcessCustomLogger { get; } + public override Action ProcessCustomLogger { get; internal set; } protected override Arguments ConfigureProcessArguments([NotNull] Arguments arguments) { diff --git a/source/Nuke.Common/Tools/Kubernetes/KubernetesCommonSettings.cs b/source/Nuke.Common/Tools/Kubernetes/KubernetesCommonSettings.cs index 93b4b4ccb..cdeaf3450 100644 --- a/source/Nuke.Common/Tools/Kubernetes/KubernetesCommonSettings.cs +++ b/source/Nuke.Common/Tools/Kubernetes/KubernetesCommonSettings.cs @@ -15,6 +15,6 @@ internal Arguments CreateArguments() return ConfigureProcessArguments(new Arguments()); } - public override Action ProcessCustomLogger { get; } + public override Action ProcessCustomLogger { get; internal set; } } } diff --git a/source/Nuke.Common/Tools/NSwag/NSwagSettings.cs b/source/Nuke.Common/Tools/NSwag/NSwagSettings.cs index a8a0500cd..c7035ee69 100644 --- a/source/Nuke.Common/Tools/NSwag/NSwagSettings.cs +++ b/source/Nuke.Common/Tools/NSwag/NSwagSettings.cs @@ -21,7 +21,7 @@ public class NSwagSettings : ToolSettings private bool IsNetCore => NSwagRuntime != null && NSwagRuntime.StartsWith("Net", StringComparison.OrdinalIgnoreCase); - public override Action ProcessCustomLogger { get; } + public override Action ProcessCustomLogger { get; internal set; } [NotNull] protected override Arguments ConfigureProcessArguments([NotNull] Arguments arguments) diff --git a/source/Nuke.Common/Tools/ReSharper/ReSharperTasks.cs b/source/Nuke.Common/Tools/ReSharper/ReSharperTasks.cs index 4cc7ba631..65d8e103c 100644 --- a/source/Nuke.Common/Tools/ReSharper/ReSharperTasks.cs +++ b/source/Nuke.Common/Tools/ReSharper/ReSharperTasks.cs @@ -73,6 +73,6 @@ private static string GetShadowDirectory(ReSharperSettingsBase toolSettings, str partial class ReSharperSettingsBase { - public override Action ProcessCustomLogger => ProcessTasks.DefaultLogger; + public override Action ProcessCustomLogger => base.ProcessCustomLogger ?? ProcessTasks.DefaultLogger; } } diff --git a/source/Nuke.Common/Tools/Unity/UnityBaseSettings.cs b/source/Nuke.Common/Tools/Unity/UnityBaseSettings.cs index 7feba628a..95d932b08 100644 --- a/source/Nuke.Common/Tools/Unity/UnityBaseSettings.cs +++ b/source/Nuke.Common/Tools/Unity/UnityBaseSettings.cs @@ -11,7 +11,7 @@ namespace Nuke.Common.Tools.Unity { public partial class UnityBaseSettings { - public override Action ProcessCustomLogger => UnityTasks.UnityLogger; + public override Action ProcessCustomLogger => base.ProcessCustomLogger ?? UnityTasks.UnityLogger; public string GetProcessToolPath() {