В моем приложении некоторые классы загружаются до создания регистратора. Каков рекомендуемый способ обновления экземпляра регистратора в этих классах? Стоит ли добавить событие 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!");
}
}