diff --git a/src/ZLogger/AsyncStreamLineMessageWriter.cs b/src/ZLogger/AsyncStreamLineMessageWriter.cs index 20b890b..d8be469 100644 --- a/src/ZLogger/AsyncStreamLineMessageWriter.cs +++ b/src/ZLogger/AsyncStreamLineMessageWriter.cs @@ -63,7 +63,7 @@ public AsyncStreamLineMessageWriter(Stream stream, ZLoggerOptions options) }), _ => throw new ArgumentOutOfRangeException() }; - + this.writeLoop = Task.Run(WriteLoop); } @@ -103,7 +103,7 @@ void AppendLine(StreamBufferWriter writer) { var span = writer.GetSpan(newLine.Length); newLine.CopyTo(span); - writer.Advance(2); + writer.Advance(newLine.Length); } } diff --git a/src/ZLogger/Internal/StreamBufferWriter.cs b/src/ZLogger/Internal/StreamBufferWriter.cs index e1c7eef..bedc465 100644 --- a/src/ZLogger/Internal/StreamBufferWriter.cs +++ b/src/ZLogger/Internal/StreamBufferWriter.cs @@ -88,17 +88,23 @@ public void Flush() { if (written != 0) { - // sync writer, ConsolePal does not support async write, use Write(byte[]) API is most primitive. - stream.Write(buffer, 0, written); - stream.Flush(); - written = 0; - - if (buffer != defaultBuffer) + try + { + // sync writer, ConsolePal does not support async write, use Write(byte[]) API is most primitive. + stream.Write(buffer, 0, written); + stream.Flush(); + } + finally { - ArrayPool.Shared.Return(buffer); - buffer = defaultBuffer; + written = 0; + + if (buffer != defaultBuffer) + { + ArrayPool.Shared.Return(buffer); + buffer = defaultBuffer; + } } } } } -} \ No newline at end of file +}