NLog, похоже, не регистрируется в среде ClickOnce, но работает в dev - PullRequest
5 голосов
/ 13 сентября 2011

Я выполняю вход в приложение через 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="logfile" xsi:type="File" fileName="${specialfolder:dir=PollingLogs:file=log.txt:folder=MyDocuments}" />
  </targets>

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

Когда я запускаю на своей машине для разработки, я получаю файл log.txt, созданный в моей папке с документами, при этом вся регистрация ведется правильно.Однако при развертывании приложения с помощью ClickOnce файл log.txt не создается (по крайней мере, я могу его найти).Никаких ошибок не возникает, и мое приложение работает в обычном режиме, но ничего не происходит.

Я зашел в тупик, как даже отладить эту проблему.У кого-нибудь есть идеи, которыми они могут поделиться, чтобы помочь мне заставить NLog работать правильно в среде clickonce?

В качестве ссылки, ссылка NLog в моем проекте настроена на копирование локально.

Ответы [ 4 ]

4 голосов
/ 12 декабря 2012

Я нашел ответ на этот вопрос, когда ваш NLog.config не будет скопирован в вашу программу, если он установлен с использованием ClickOnce.

Вам необходимо выбрать NLog.config файл в вашем Project с помощью Solution Explorer и установить его Properties следующим образом:

Действие создания : содержимое

Копировать в выходной каталог : всегда копировать

Теперь при развертывании с использованием ClickOnce файлы также должны быть скопированы! :)

4 голосов
/ 11 декабря 2012

Я знаю, что это немного поздно, но есть другое решение, описанное здесь: Настройте log4net или NLog с XML из кода , хотя он отвечает на другой вопрос.

У меня была та же проблема, описанная KallDrexx,Меня не устраивает несколько файлов конфигурации NLog (несколько проектов в одном решении), поэтому я создал класс NLogHelper, у которого есть метод, возвращающий конфигурацию:

    public static XmlLoggingConfiguration SetNlogConfiguration()
    {
        var sr = new StringReader(NlogXmlConfigString1());
        var xr = XmlReader.Create(sr);
        var config = new XmlLoggingConfiguration(xr, null);
        return config;
    }

Отдельный метод просто возвращает строку xmlв моем случае:

    private static string NlogXmlConfigString1()
    {
        return  @"<nlog xmlns='http://www.nlog-project.org/schemas/NLog.xsd\'
                       xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance\'>
                  <targets>
                       <target name='logfile' xsi:type='File' fileName='${specialfolder:file=My_Logger.txt:folder=Desktop}' />
                  </targets>

                  <rules>
                    <logger name='*' minlevel='Info' writeTo='logfile' />
                  </rules>
                 </nlog>";
    }

Наконец, я просто установил конфигурацию в соответствующем конструкторе класса:

    NLog.LogManager.Configuration = NlogHelper.Helper.SetNlogConfiguration();

Очевидно, что он может быть реорганизован и могут быть переданы такие элементы, как имя файла журналав качестве параметров, если требуется.Конфигурационный XML может быть просто заменен на любую вашу конфигурацию.Также, кажется, предлагает возможность легко указать несколько конфигураций, которые выбираются во время выполнения.

Мне это нравится, потому что я считаю, что это дает мне больший контроль над конфигурацией NLog в коде и во время развертывания.

2 голосов
/ 13 сентября 2011

Для отладки используйте Sysinternal ProcessMon (бесплатно). Он может показать вам, помимо прочего, доступ к файлам, пробный / сделанный процессом ...

Для этого вида журнала я бы рекомендовал использовать ApplicationData или CommonApplicationData или LocalApplicationData из Environment.SpecialFolder, а не MyDocuments ...

0 голосов
/ 04 апреля 2012

Я столкнулся с этой проблемой в проекте, над которым работал сегодня.

Файл NLog.config копируется в ваши каталоги сборки, поэтому, когда вы запускаете его оттуда, все нормально, , но установщиками ClickOnce являются , а не , когда развертывается файл NLog.config, когда программное обеспечение установлено.

Это объясняет поведение, которое вы видите: при запуске из установленной копии оно просто не имеет никакой конфигурации журналирования.

Единственное решение, которое я нашел до сих пор, - это объединить конфигурацию регистрации в ваш файл app.config, потому что файл exe.config разворачивается ClickOnce - у меня не было особой радости при попытке добавить NLog. Конфиг для установщика.

...