Если в NLog есть проблема, например, неправильная конфигурация ведения журнала, NLog может выдать исключение.
Если это исключение выбрасывается до создания типа запуска, .NET скрывает исключение с помощью TypeInitializationException
(См. Также Лучшее TypeInitializationException (innerException также имеет значение null) ).
Например, в этом случае:
class Program
{
// this throws a NLogConfigurationException because of bad config. (like invalid XML)
// as this issue will be throw before Main() is called, you will get
// a TypeInitializationException instead of a NLogConfigurationException
private static Logger logger = LogManager.GetCurrentClassLogger();
static void Main()
{
Console.WriteLine("Press any key");
Console.ReadLine();
}
}
Решения
3 возможных решения:
Использование ленивых
class Program
{
private static Lazy<Logger> logger = new Lazy<Logger>(() => LogManager.GetCurrentClassLogger());
static void Main()
{
Console.WriteLine("Press any key");
Console.ReadLine();
}
}
Создатьрегистратор в main ()
class Program
{
private static Logger logger;
static void Main()
{
logger = LogManager.GetCurrentClassLogger();
Console.WriteLine("Press any key");
Console.ReadLine();
}
}
Создание локального регистратора
class Program
{
static void Main()
{
private logger = LogManager.GetCurrentClassLogger();
Console.WriteLine("Press any key");
Console.ReadLine();
}
}