using System.Runtime.CompilerServices;
public static void Main()
var logger = new Logger();
logger.LogMessage(LogLevel.Critical, "Critical messsage");
logger.LogMessage(LogLevel.Critical, $"Critical messsage {DateTime.Now}");
logger.LogMessage(LogLevel.Information, $"Information messsage {DateTime.Now}");
public LogLevel EnabledLevel { get; init; } = LogLevel.Error;
public void LogMessage(LogLevel level, string msg)
Console.WriteLine("LogMessage string version");
if (EnabledLevel < level) return;
public void LogMessage(LogLevel level, [InterpolatedStringHandlerArgument("", "level")]LogInterpolatedStringHandler builder)
Console.WriteLine("LogMessage interpolated string version");
if (EnabledLevel < level) return;
Console.WriteLine(builder.GetFormattedText());
[InterpolatedStringHandler]
public struct LogInterpolatedStringHandler
private readonly bool enabled;
public LogInterpolatedStringHandler(int literalLength, int formattedCount, Logger logger, LogLevel logLevel)
enabled = logger.EnabledLevel >= logLevel;
builder = new StringBuilder(literalLength);
public void AppendLiteral(string s)
Console.WriteLine($"Append Literal {s}");
public void AppendFormatted<T>(T t)
Console.WriteLine($"Append Formatted {t}");
builder.Append(t.ToString());
internal string GetFormattedText() => builder.ToString();