Log.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. using System;
  2. namespace InABox.Core
  3. {
  4. public enum LogType
  5. {
  6. Information,
  7. Query,
  8. Update,
  9. Error,
  10. /// <summary>
  11. /// This log is an important notice that the system administrator should not ignore.
  12. /// </summary>
  13. Important
  14. }
  15. public delegate void LogEvent(LogType type, string userid, string message, Guid transaction);
  16. public class Logger
  17. {
  18. public static event LogEvent OnLog;
  19. public static Logger Main = new Logger(Guid.Empty);
  20. public Guid Transaction { get; set; }
  21. public Logger(Guid transaction)
  22. {
  23. Transaction = transaction;
  24. }
  25. public static Logger New() => new Logger(Guid.NewGuid());
  26. public void Error(string message)
  27. {
  28. this.Send(LogType.Error, "", message);
  29. }
  30. public void Error(string userid, string message)
  31. {
  32. this.Send(LogType.Error, userid, message);
  33. }
  34. public void Info(string message)
  35. {
  36. this.Send(LogType.Information, "", message);
  37. }
  38. public void Info(string userid, string message)
  39. {
  40. this.Send(LogType.Information, userid, message);
  41. }
  42. public void Send(LogType logtype, string userid, string message)
  43. {
  44. OnLog?.Invoke(logtype, userid, message, Transaction);
  45. }
  46. public static void Send(LogType logtype, string userid, string message, Guid? transaction = null)
  47. {
  48. OnLog?.Invoke(logtype, userid, message, transaction ?? Guid.Empty);
  49. }
  50. public static void SendFormat(LogType logtype, string userid, string message, Guid? transaction, params object[] parameters)
  51. {
  52. OnLog?.Invoke(logtype, userid, string.Format(message, parameters), transaction ?? Guid.Empty);
  53. }
  54. }
  55. }