如何将 TextWriter 用作 Serilog 的源?

Ric*_*tte 8 stackexchange.redis serilog

StackExchange.Redis 将日志消息写入 TextWriter。它不使用 ILogger 接口进行日志记录。

我想将写入 TextWriter 的消息转换为 Serilog 调试级别的消息。

想法?

d_f*_*d_f 3

类似于以下内容(仅经过冒烟测试,但似乎有效):

public class TextWriterLogger : TextWriter
{
    private ILogger logger;
    private StringBuilder builder = new StringBuilder();
    private bool terminatorStarted = false;

    public TextWriterLogger(ILoggerFactory log)
    {
        logger = log.CreateLogger("RedisTrace");
    }

    public override void Write(string value)
    {
        logger.LogDebug(value);
    }

    public override void Write(char value)
    {
        builder.Append(value);
        if (value == NewLine[0])
            if (NewLine.Length == 1)
                Flush2Log();
            else
                terminatorStarted = true;
        else if (terminatorStarted)
            if (terminatorStarted = NewLine[1] == value)
                Flush2Log();
    }

    private void Flush2Log()
    {
        if (builder.Length > NewLine.Length)
            logger.LogDebug(builder.ToString());
        builder.Clear();
        terminatorStarted = false;
    }


    public override Encoding Encoding
    {
        get { return Encoding.Default; }
    }
}
Run Code Online (Sandbox Code Playgroud)