57 lines
1.7 KiB
C#
57 lines
1.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace CloudBuilder.Topshelf.Utility
|
|
{
|
|
public static class SherpaLogFilter
|
|
{
|
|
/// <summary>
|
|
/// 只屏蔽 sherpa-onnx 输出的日志,不影响你的进度条
|
|
/// </summary>
|
|
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");
|
|
}
|
|
}
|
|
}
|
|
}
|