This commit is contained in:
owenchen committed 2026-06-02 11:15:49 +08:00
1 parent 5f222a23b3
commit a71094cbf5
3 files changed
+134 -18

No files matched your search

+68
View File
@@ -0,0 +1,68 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace CloudBuilder.Topshelf.Utility
{
// 先把这个类放到你的代码文件里
public static class ConsoleHelper
{
[DllImport("kernel32.dll")]
static extern IntPtr GetStdHandle(int nStdHandle);
[DllImport("kernel32.dll")]
static extern int SetStdHandle(int nStdHandle, IntPtr hHandle);
const int STD_OUTPUT_HANDLE = -11;
const int STD_ERROR_HANDLE = -12;
/// <summary>
/// 屏蔽所有底层C++输出(彻底隐藏 SherpaOnnx 日志)
/// </summary>
public static void DisableConsoleOutput()
{
var nullHandle = IntPtr.Zero;
SetStdHandle(STD_OUTPUT_HANDLE, nullHandle);
SetStdHandle(STD_ERROR_HANDLE, nullHandle);
}
/// <summary>
/// 恢复输出(如果你需要)
/// </summary>
public static void EnableConsoleOutput()
{
var outHandle = GetStdHandle(STD_OUTPUT_HANDLE);
var errHandle = GetStdHandle(STD_ERROR_HANDLE);
SetStdHandle(STD_OUTPUT_HANDLE, outHandle);
SetStdHandle(STD_ERROR_HANDLE, errHandle);
}
}
public static class ConsoleOutput
{
private const int STD_ERROR_HANDLE = -12;
private static IntPtr _originalErrorHandle;
[DllImport("kernel32.dll")]
private static extern IntPtr GetStdHandle(int nStdHandle);
[DllImport("kernel32.dll")]
private static extern bool SetStdHandle(int nStdHandle, IntPtr hHandle);
/// <summary>
/// 只关闭 标准错误输出(stderr)
/// 作用:屏蔽 sherpa-onnx 所有垃圾日志
/// 保留:你的进度条、控制台输出(stdout)
/// </summary>
public static void HideStdError()
{
_originalErrorHandle = GetStdHandle(STD_ERROR_HANDLE);
SetStdHandle(STD_ERROR_HANDLE, IntPtr.Zero);
}
}
}
+56
View File
@@ -0,0 +1,56 @@
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");
}
}
}
}