1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- using System;
- using System.IO;
- using System.Text;
- using BepInEx.Logging;
- using HarmonyLib;
- namespace BepInEx.Preloader.RuntimeFixes
- {
- public static class ConsoleSetOutFix
- {
- private static LoggedTextWriter loggedTextWriter;
- internal static ManualLogSource ConsoleLogSource = Logger.CreateLogSource("Console");
- public static void Apply()
- {
- loggedTextWriter = new LoggedTextWriter { Parent = Console.Out };
- Console.SetOut(loggedTextWriter);
- HarmonyLib.Harmony.CreateAndPatchAll(typeof(ConsoleSetOutFix));
- }
- [HarmonyPatch(typeof(Console), nameof(Console.SetOut))]
- [HarmonyPrefix]
- private static bool OnSetOut(TextWriter newOut)
- {
- loggedTextWriter.Parent = newOut;
- return false;
- }
- }
- internal class LoggedTextWriter : TextWriter
- {
- public override Encoding Encoding { get; } = Encoding.UTF8;
- public TextWriter Parent { get; set; }
- public override void Flush() => Parent.Flush();
- public override void Write(string value)
- {
- ConsoleSetOutFix.ConsoleLogSource.LogInfo(value);
- Parent.Write(value);
- }
- public override void WriteLine(string value)
- {
- ConsoleSetOutFix.ConsoleLogSource.LogInfo(value);
- Parent.WriteLine(value);
- }
- }
- }
|