LoggerImpl.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using XGame.Framework.Utils;
  2. using LitJson;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.IO;
  6. namespace XGame.Framework.Logger
  7. {
  8. internal class LoggerImpl : ILogger, ILogFlushable, IDisposable
  9. {
  10. private ILogColors _colors;
  11. private WriterRepository _writerRepository;
  12. private JsonData _jsonData;
  13. private JsonData jsonData => _jsonData ?? (_jsonData = new JsonData());
  14. public LoggerImpl(ILogColors logColors, WriterRepository writerRepository)
  15. {
  16. _colors = logColors;
  17. _writerRepository = writerRepository;
  18. }
  19. public void Initialize()
  20. {
  21. _colors?.Initialize();
  22. if (_writerRepository != null)
  23. {
  24. var logDirectory = LogDefine.LogRootPath;
  25. if (!Directory.Exists(logDirectory))
  26. {
  27. Directory.CreateDirectory(logDirectory);
  28. }
  29. }
  30. }
  31. public string Log(LogLevel level, string format, params object[] args)
  32. {
  33. var entity = new LogCodeEntity()
  34. {
  35. log_level = level.ToString(),
  36. log_info = format.Format(args),
  37. };
  38. if (_writerRepository != null)
  39. {
  40. _writerRepository.GetWriter(LogType.Code).Write(entity.ToWriteString());
  41. }
  42. var logInfo = entity.ToConsoleString();
  43. if (_colors != null)
  44. {
  45. return _colors.Format(level, logInfo);
  46. }
  47. return logInfo;
  48. }
  49. public string Event(string type, string id, Dictionary<string, string> infos)
  50. {
  51. var entity = new LogEventEntity()
  52. {
  53. event_type = type,
  54. event_id = id,
  55. info = infos
  56. };
  57. if (_writerRepository != null)
  58. {
  59. _writerRepository.GetWriter(LogType.Event).Write(entity.ToWriteString(jsonData));
  60. }
  61. var logInfo = entity.ToConsoleString();
  62. if (_colors != null)
  63. {
  64. return _colors.Format(LogLevel.Event, logInfo);
  65. }
  66. return logInfo;
  67. }
  68. public void Dispose()
  69. {
  70. (_writerRepository as IDisposable)?.Dispose();
  71. }
  72. void ILogFlushable.Flush(LogType logType)
  73. {
  74. if (_writerRepository == null)
  75. return;
  76. _writerRepository.GetWriter(logType).Flush();
  77. }
  78. }
  79. }