Logger.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using System;
  2. using System.Runtime.CompilerServices;
  3. namespace VCommon.Logging
  4. {
  5. /// <summary> 日志入口,可在运行时指定目标 </summary>
  6. public static class Logger
  7. {
  8. private static ILogger _target = new ConsoleLogger();
  9. private static bool _enableDebugLevel;
  10. private static Action<string, object> _debug;
  11. /// <summary> 指定日志目标 </summary>
  12. public static void Init(ILogger target)
  13. {
  14. if (target is DefaultLogger) throw new ArgumentException($"Can not use {nameof(DefaultLogger)}");
  15. _target = target;
  16. if (EnableDebugLevel) _debug = _target.Debug;
  17. }
  18. /// <summary> 启用Debug级别日志 </summary>
  19. public static bool EnableDebugLevel
  20. {
  21. get => _enableDebugLevel;
  22. set
  23. {
  24. _enableDebugLevel = value;
  25. _debug = value ? _target.Debug : (Action<string, object>)null;
  26. }
  27. }
  28. [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)]
  29. public static void Debug(string summary, object moreInfo = null) => _debug?.Invoke(summary, moreInfo);
  30. [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)]
  31. public static void Trace(string summary, object moreInfo = null) => _target.Trace(summary, moreInfo);
  32. [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)]
  33. public static void Info(string summary, object moreInfo = null) => _target.Info(summary, moreInfo);
  34. [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)]
  35. public static void Warn(string summary, object moreInfo = null) => _target.Warn(summary, moreInfo);
  36. [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)]
  37. public static void Error(string summary, object moreInfo = null) => _target.Error(summary, moreInfo);
  38. [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)]
  39. public static void Fatal(string summary, object moreInfo = null) => _target.Fatal(summary, moreInfo);
  40. }
  41. }