Рекомендуемый способ обновления экземпляра регистратора классов stati c после создания / изменения регистратора - PullRequest
0 голосов
/ 05 мая 2020

В моем приложении некоторые классы загружаются до создания регистратора. Каков рекомендуемый способ обновления экземпляра регистратора в этих классах? Стоит ли добавить событие LoggerCreated? Я использую LibLog, Serilog и. NET Framework.

Вот пример проблемы:

  public class MainClass
  {
    public static void MainTest()
    {
      string logFile = TestClass.GetLogConfgurationFile();
      Serilog.Log.Logger = new LoggerConfiguration().ReadFrom.AppSettings(filePath: logFile).CreateLogger();
      TestClass.TestLogger(); // <== The log WILL NOT contain the expected "Hello, World!"
    }
  }
  public static class TestClass
  {
    private static ILog _logger = LogProvider.GetCurrentClassLogger();
    public static string GetLogConfgurationFile()
    {
      return @"C:\Serilog Config.xml";
    }
    public static void TestLogger()
    {
      _logger.Debug("Hello, World!");
    }
  }

Вот мое предлагаемое решение:

  public class TestClass
  {
    public static event Action LoggerCreated;
    public static void MainTest()
    {
      string logFile = TestClass.GetLogConfgurationFile();
      Serilog.Log.Logger = new LoggerConfiguration().ReadFrom.AppSettings(filePath: logFile).CreateLogger();
      Action handler = LoggerCreated;
      handler?.Invoke();
      TestClass.TestLogger(); // <== The log WILL contain the expected "Hello, World!"
    }
  }
  public static class TestClass
  {
    private static ILog _logger = LogProvider.GetCurrentClassLogger();
    static TestClass()
    {
      TestClass.LoggerCreated += () => _logger = LogProvider.GetCurrentClassLogger();
    }
    private static void TestClass_LoggerCreated()
    {
      _logger = LogProvider.GetCurrentClassLogger();
    }
    public static string GetLogConfgurationFile()
    {
      return @"C:\Serilog Config.xml";
    }
    public static void TestLogger()
    {
      _logger.Debug("Hello, World!");
    }
  }
...