如何将TextWriter用作Serilog的源



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

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

想法?

类似以下内容(只测试了烟雾,但似乎有效(:

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; }
}
}

最新更新