|
- using System.IO;
- using System.Net;
- using System.Reflection;
- using System.Text;
- using HarmonyLib;
-
- namespace CLre_server.WebStatus
- {
- public class LogEndpoints
- {
- [WebEndpoint("/l/current")]
- private static void FullLog(HttpListenerContext ctx)
- {
- if (CustomLogger_GetFileNameToUse_Patch.currentLogFile == null)
- {
- byte[] output = Encoding.UTF8.GetBytes("No log file available");
- ctx.Response.OutputStream.Write(output, 0, output.Length);
- return;
- }
- // copy file because log is already open for writing
- string copyFilename = CustomLogger_GetFileNameToUse_Patch.currentLogFile + ".copy";
- File.Copy(CustomLogger_GetFileNameToUse_Patch.currentLogFile, copyFilename, true);
- FileStream logFile = new FileStream(copyFilename, FileMode.Open, FileAccess.Read, FileShare.Read);
- logFile.CopyTo(ctx.Response.OutputStream);
- logFile.Close();
- }
- }
-
- [HarmonyPatch]
- class CustomLogger_GetFileNameToUse_Patch
- {
- internal static string currentLogFile = null;
-
- [HarmonyPostfix]
- public static void AfterMethodCall(string __result)
- {
- #if DEBUG
- API.Utility.Logging.MetaLog($"Current logfile is {__result}");
- #endif
- currentLogFile = __result;
- }
-
- [HarmonyTargetMethod]
- public static MethodBase Target()
- {
- return AccessTools.Method("CustomLogger:GetFileNameToUse");
- }
- }
- }
|