Плохая конфигурация NLog? - PullRequest
2 голосов
/ 29 декабря 2010

Хорошо, поэтому я пробую NLog, но он продолжает падать. Позвольте мне пройти через то, что у меня есть.

Мой файл NLog.config:

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <targets>
      <target name="file" xsi:type="File"
            layout="${longdate} ${logger} ${message}"
            fileName="${basedir}/Logs/${shortdate}.log" />
    </targets>

    <rules>
        <logger name="*" minlevel="Debug" writeTo="file" />
    </rules>
</nlog>

Тогда я создаю свой объект так:

private static Logger logger = LogManager.GetCurrentClassLogger();

А потом, когда я хочу что-то записать, я делаю это так:

try
{   
    // Do something
}
catch (Exception ex)
{
    logger.Fatal("ERROR {0}", ex);
    return null;
}

Но я получаю следующие ошибки:

System.TypeInitializationException was unhandled
Message="The type initializer for 'Rhs.CMSSites.Services.GetBlogFeeds' threw an exception."
Source="GetBlogFeeds"
TypeName="Rhs.CMSSites.Services.GetBlogFeeds"
StackTrace:
   at Rhs.CMSSites.Services.GetBlogFeeds.Main(String[] args)
   at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
   at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()
InnerException: System.NullReferenceException
   Message="Object reference not set to an instance of an object."
   Source="GetBlogFeeds"
   StackTrace:
        at Rhs.CMSSites.Services.GetBlogFeeds.UserDetails(String UserName) in C:\Dev\Rhs.CMSSites.Services\GetBlogFeeds\GetBlogFeeds\Program.cs:line 217
        at Rhs.CMSSites.Services.GetBlogFeeds..cctor() in C:\Dev\Rhs.CMSSites.Services\GetBlogFeeds\GetBlogFeeds\Program.cs:line 25
   InnerException: 

Есть идеи?

Редактировать

Вероятно, следовало бы упомянуть об этом раньше, но это приложение командной строки. GetBlogFeeds - это имя класса.

Edit2

Хорошо, я был абсолютным идиотом. Я вызывал метод UserDetails() (который пытается использовать метод NLog) до создания экземпляра класса logger. Я собираюсь выразить вам обоим голос. Спасибо и извините.

Ответы [ 2 ]

2 голосов
/ 29 декабря 2010

Мое предположение (и это просто так) будет заключаться в том, что это не имеет ничего общего с NLog, а скорее состоит в том, что TypeInitializationException настолько серьезен и / или не встречается в контексте этого try ... catch, что NLog не У меня нет возможности зайти в него.

Если вы ставите точку останова в этом операторе logger.Fatal, останавливается ли там выполнение при запуске с подключенным отладчиком?

То, что на самом деле происходит в классе ctor для GetBlogFeeds - из трассировки стека выглядит так, как будто вы вызываете UserDetails для конкретного пользователя, что кажется немного странным в класс ктор.

1 голос
/ 29 декабря 2010

Почему вы возвращаете значение NULL, когда возникает исключение?

На основании опубликованного исключения, из-за нулевого исключения, это также может быть тот факт, что вы пытаетесь зарегистрировать весь объект Exception вместо егоСообщение.

Убедитесь, что вы согласны с этим ответом, чтобы пометить его как ответ.Если у вас есть дополнительные вопросы по поводу опубликованной ошибки, я могу ответить на них.Без дополнительной информации (например), где именно ошибка происходит в вашем коде, я не смог бы предоставить больше информации.

Я только что указал на два странных поведения.

...