using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CloudBuilder.Topshelf.Utility { public static class SherpaLogFilter { /// /// 只屏蔽 sherpa-onnx 输出的日志,不影响你的进度条 /// public static void HideSherpaOnnxLogs() { // 过滤 stdout var originalOut = Console.Out; Console.SetOut(new FilterWriter(originalOut)); // 过滤 stderr var originalError = Console.Error; Console.SetError(new FilterWriter(originalError)); } private class FilterWriter : TextWriter { private readonly TextWriter _inner; public FilterWriter(TextWriter inner) => _inner = inner; public override Encoding Encoding => Encoding.UTF8; public override void WriteLine(string value) { // 屏蔽包含这些关键词的日志 if (!ShouldFilter(value)) _inner.WriteLine(value); } public override void Write(string value) { // 关键:不屏蔽 Write(...) → 你的进度条就是用 Write 输出的,会保留! if (!ShouldFilter(value)) _inner.Write(value); } private bool ShouldFilter(string s) { if (s == null) return false; return s.Contains("sherpa-onnx") || s.Contains("character-lexicon.cc") || s.Contains("Ignore OOV") || s.Contains("ConvertTextToTokenIds"); } } } }