Logger.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. // Copyright (c) The Avalonia Project. All rights reserved.
  2. // Licensed under the MIT license. See licence.md file in the project root for full license information.
  3. namespace Avalonia.Logging
  4. {
  5. /// <summary>
  6. /// Logs avalonia messages.
  7. /// </summary>
  8. public static class Logger
  9. {
  10. /// <summary>
  11. /// Gets or sets the application-defined sink that receives the messages.
  12. /// </summary>
  13. public static ILogSink Sink { get; set; }
  14. /// <summary>
  15. /// Checks if given log level is enabled.
  16. /// </summary>
  17. /// <param name="level">The log event level.</param>
  18. /// <returns><see langword="true"/> if given log level is enabled.</returns>
  19. public static bool IsEnabled(LogEventLevel level)
  20. {
  21. return Sink?.IsEnabled(level) == true;
  22. }
  23. /// <summary>
  24. /// Returns parametrized logging sink if given log level is enabled.
  25. /// </summary>
  26. /// <param name="level">The log event level.</param>
  27. /// <returns>Log sink or <see langword="null"/> if log level is not enabled.</returns>
  28. public static ParametrizedLogger? TryGet(LogEventLevel level)
  29. {
  30. if (!IsEnabled(level))
  31. {
  32. return null;
  33. }
  34. return new ParametrizedLogger(Sink, level);
  35. }
  36. /// <summary>
  37. /// Returns parametrized logging sink if given log level is enabled.
  38. /// </summary>
  39. /// <param name="level">The log event level.</param>
  40. /// <param name="outLogger">Log sink that is valid only if method returns <see langword="true"/>.</param>
  41. /// <returns><see langword="true"/> if logger was obtained successfully.</returns>
  42. public static bool TryGet(LogEventLevel level, out ParametrizedLogger outLogger)
  43. {
  44. ParametrizedLogger? logger = TryGet(level);
  45. outLogger = logger.GetValueOrDefault();
  46. return logger.HasValue;
  47. }
  48. }
  49. }