内插字符串处理器:自定义高性能日志构建器
利用 InterpolatedStringHandler 模式创建条件日志、内存池化的字符串构造,避免无意义的格式化。 · 难度:入门 · +10XP
内插字符串处理器:自定义高性能日志构建器
C# 10 允许你实现自己的内插字符串处理器,用于控制字符串如何被构建。本教程演示如何创建一个日志处理器,仅在日志级别启用时才实际格式化参数,并复用 StringBuilder 池。你还会学到如何与 LoggerMessage 结合,在 Serilog/NLog 相同风格下实现零分配日志。
[InterpolatedStringHandler]
public ref struct LogInterpolatedStringHandler
{
private StringBuilder? _builder;
private readonly bool _enabled;
public LogInterpolatedStringHandler(int literalLength, int formattedCount, LogLevel level, out bool enabled)
{
_enabled = level >= LogLevel.Warning;
enabled = _enabled;
if (_enabled) _builder = StringBuilderPool.Get();
}
public void AppendLiteral(string s) { if (_enabled) _builder!.Append(s); }
public void AppendFormatted<T>(T value) { if (_enabled) _builder!.Append(value); }
}