You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

50 lines
1.6 KiB

  1. using IllusionPlugin.Logging;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. namespace IllusionInjector.Logging.Printers
  9. {
  10. public class PluginLogFilePrinter : LogPrinter
  11. {
  12. public override IllusionPlugin.Logging.Logger.LogLevel Filter { get; set; } = IllusionPlugin.Logging.Logger.LogLevel.All;
  13. private FileInfo fileInfo;
  14. private StreamWriter fileWriter;
  15. private static FileInfo GetFileInfo(string modName)
  16. {
  17. var logsDir = new DirectoryInfo(Path.Combine("Logs",modName));
  18. logsDir.Create();
  19. var finfo = new FileInfo(Path.Combine(logsDir.FullName, $"{DateTime.Now:yyyy.MM.dd.HH.MM}.log"));
  20. finfo.CreateText().Close();
  21. return finfo;
  22. }
  23. public PluginLogFilePrinter(string name)
  24. {
  25. fileInfo = GetFileInfo(name);
  26. }
  27. public override void StartPrint()
  28. {
  29. fileWriter = fileInfo.AppendText();
  30. }
  31. public override void Print(IllusionPlugin.Logging.Logger.Level level, DateTime time, string logName, string message)
  32. {
  33. foreach (var line in message.Split(new string[] { "\n", Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries))
  34. fileWriter.WriteLine(string.Format("[{3} @ {2:HH:mm:ss}] {0}", line, logName, time, level.ToString().ToUpper()));
  35. }
  36. public override void EndPrint()
  37. {
  38. fileWriter.Flush();
  39. fileWriter.Close();
  40. fileWriter.Dispose();
  41. }
  42. }
  43. }