NeoAgi / NeoAgi.AWS.CodeArtifact.Pruner

Helper Utility to Mange an Amazon CodeArtifact Domain
https://gallery.ecr.aws/x7q2k3a7/neoagi.aws.codeartifact.pruner
Apache License 2.0
0 stars 0 forks source link

Fix LogLevel Parameter #17

Closed Habikki closed 9 months ago

Habikki commented 9 months ago

It was discovered that the logging output was stuck at Trace regardless of the value of LogLevel.

To fix this we may need to bring the XML Config into code (which is cleaner anyway): https://github.com/NLog/NLog/wiki/JsonLayout

Habikki commented 9 months ago

This will take a little cleanup, but consists of two parts:

private static NLog.LogLevel MapLogLevel(LogLevel logLevel)
        {
            switch (logLevel)
            {
                case LogLevel.Critical:
                    return NLog.LogLevel.Fatal;
                case LogLevel.Error:
                    return NLog.LogLevel.Error;
                case LogLevel.Warning:
                    return NLog.LogLevel.Warn;
                case LogLevel.Information:
                    return NLog.LogLevel.Info;
                case LogLevel.Debug:
                    return NLog.LogLevel.Trace;
                case LogLevel.None:
                default:
                    return NLog.LogLevel.Off;
            }
        }
.ConfigureLogging((hostContext, logBuilder) =>
                {
                    logBuilder.ClearProviders();
                    LogLevel minimumLogLevel = Enum<Microsoft.Extensions.Logging.LogLevel>.ParseOrDefault(
                        hostContext.Configuration.GetValue<string>("ServiceConfig:LogLevel"), Microsoft.Extensions.Logging.LogLevel.Debug);
                    logBuilder.SetMinimumLevel(minimumLogLevel);

                    var config = new NLog.Config.LoggingConfiguration();

                    // Targets where to log to: File and Console
                    var logconsole = new NLog.Targets.ColoredConsoleTarget("logconsole");
                    logconsole.Layout = new JsonLayout
                    {
                        Attributes =
                            {
                                new JsonAttribute("timestamp", "${date:universalTime=true:format=o}"),
                                new JsonAttribute("hostname", "${hostname}"),
                                new JsonAttribute("threadId", "${threadId}"),
                                new JsonAttribute("level", "${level:upperCase=true}"),
                                new JsonAttribute("logger", "${logger}"),
                                new JsonAttribute("message", "${message}"),
                                new JsonAttribute("properties", new JsonLayout { IncludeEventProperties = true, MaxRecursionLimit = 2 }, encode: false),
                                new JsonAttribute("exception", new JsonLayout
                                {
                                    Attributes =
                                    {
                                        new JsonAttribute("type", "${exception:format=type}"),
                                        new JsonAttribute("message", "${exception:format=message}"),
                                        new JsonAttribute("stacktrace", "${exception:format=tostring}"),
                                    }
                                },
                                encode: false) // don't escape layout
                            }
                    };

                    // Rules for mapping loggers to targets
                    config.AddRule(NLog.LogLevel.Warn, NLog.LogLevel.Fatal, logconsole);
                    config.AddRule(MapLogLevel(minimumLogLevel), NLog.LogLevel.Fatal, logconsole, "NeoAgi.*");

                    // Apply config           
                    NLog.LogManager.Configuration = config;

                    // Finally add NLog to the Configuration Builder
                    logBuilder.AddNLog();

                })