StackInfoDecorater.cs 992 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. using System.Diagnostics;
  2. using System.IO;
  3. namespace Base
  4. {
  5. internal class StackInfoDecorater: ALogDecorater
  6. {
  7. public StackInfoDecorater(ALogDecorater decorater = null): base(decorater)
  8. {
  9. this.FileName = true;
  10. this.FileLineNumber = true;
  11. }
  12. public bool FileName { get; set; }
  13. public bool FileLineNumber { get; set; }
  14. public override string Decorate(string message)
  15. {
  16. if (this.decorater != null)
  17. {
  18. message = this.decorater.Decorate(message);
  19. }
  20. if (!this.FileLineNumber && !this.FileName)
  21. {
  22. return message;
  23. }
  24. string extraInfo = "";
  25. StackTrace stackTrace = new StackTrace(true);
  26. StackFrame frame = stackTrace.GetFrame(this.Level + 3);
  27. if (this.FileName)
  28. {
  29. string fileName = Path.GetFileName(frame.GetFileName());
  30. extraInfo += fileName + " ";
  31. }
  32. if (this.FileLineNumber)
  33. {
  34. int fileLineNumber = frame.GetFileLineNumber();
  35. extraInfo += fileLineNumber + " ";
  36. }
  37. return extraInfo + message;
  38. }
  39. }
  40. }