DefaultLogFormatter.cs 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using System.Diagnostics;
  2. using System.Text;
  3. namespace Ryujinx.Common.Logging.Formatters
  4. {
  5. internal class DefaultLogFormatter : ILogFormatter
  6. {
  7. private static readonly ObjectPool<StringBuilder> StringBuilderPool = SharedPools.Default<StringBuilder>();
  8. public string Format(LogEventArgs args)
  9. {
  10. StringBuilder sb = StringBuilderPool.Allocate();
  11. try
  12. {
  13. sb.Clear();
  14. sb.Append($@"{args.Time:hh\:mm\:ss\.fff}");
  15. sb.Append($" |{args.Level.ToString()[0]}| ");
  16. if (args.ThreadName != null)
  17. {
  18. sb.Append(args.ThreadName);
  19. sb.Append(' ');
  20. }
  21. sb.Append(args.Message);
  22. if (args.Data is not null)
  23. {
  24. if (args.Data is StackTrace trace)
  25. {
  26. sb.Append('\n');
  27. sb.Append(trace);
  28. return sb.ToString();
  29. }
  30. sb.Append(' ');
  31. DynamicObjectFormatter.Format(sb, args.Data);
  32. }
  33. return sb.ToString();
  34. }
  35. finally
  36. {
  37. StringBuilderPool.Release(sb);
  38. }
  39. }
  40. }
  41. }