DefaultLogFormatter.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. using System.Reflection;
  2. using System.Text;
  3. namespace Ryujinx.Common.Logging
  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.AppendFormat(@"{0:hh\:mm\:ss\.fff}", args.Time);
  15. sb.Append(" | ");
  16. sb.AppendFormat("{0:d4}", args.ThreadId);
  17. sb.Append(' ');
  18. sb.Append(args.Message);
  19. if (args.Data != null)
  20. {
  21. PropertyInfo[] props = args.Data.GetType().GetProperties();
  22. sb.Append(' ');
  23. foreach (var prop in props)
  24. {
  25. sb.Append(prop.Name);
  26. sb.Append(": ");
  27. sb.Append(prop.GetValue(args.Data));
  28. sb.Append(" - ");
  29. }
  30. // We remove the final '-' from the string
  31. if (props.Length > 0)
  32. {
  33. sb.Remove(sb.Length - 3, 3);
  34. }
  35. }
  36. return sb.ToString();
  37. }
  38. finally
  39. {
  40. _stringBuilderPool.Release(sb);
  41. }
  42. }
  43. }
  44. }