NLog в WCF Сервис - PullRequest
       34

NLog в WCF Сервис

3 голосов
/ 03 февраля 2011

Могу ли я использовать NLog в службе WCF?Я пытаюсь, но не могу заставить его работать.

Сначала я настроил простую конфигурацию в приложении Windows Forms, чтобы проверить, правильно ли я настраивал, и это нормально записало файл журнала (я пишу всетевое местоположение, используя имя, а не IP-адрес).

Затем я сделал то же самое в службе WCF.Это не сработало.

Для проверки прав доступа я добавил код для использования TextWriter.

        TextWriter tw = new StreamWriter(fileName);
        tw.WriteLine(DateTime.Now);
        tw.Close();

Это сработало, так что я знаю, что могу писать в местоположение.

Ответы [ 3 ]

0 голосов
/ 23 февраля 2011

Убедитесь, что ваш файл NLog.config находится в том же каталоге, что и ваш файл .svc, а НЕ в каталоге Bin.

Если вы только что добавили файл конфигурации в проект WCF, а затем опубликовали его, вы, вероятно, обнаружите, что файл конфигурации скопирован в каталог bin, поэтому NLog не может его найти. Переместите его на уровень выше, а затем перезапустите веб-сайт, на котором размещена служба (чтобы убедиться, что изменение выполнено).

Это сделало меня немного озадаченным этим утром!

0 голосов
/ 20 января 2012

Поместите свою конфигурацию NLog в файл web.config . Вот так:

<?xml version="1.0"?>
<configuration>
  <configSections>
    <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/>
  </configSections>

  . . . (lots of web stuff)

  <nlog>
    <targets>
      <target name="file" xsi:type="File" fileName="${basedir}/logs/nlog.log"/>
    </targets>
    <rules>
      <logger name="*" minlevel="Trace" writeTo="file" />
    </rules>
  </nlog>
</configuration>
0 голосов
/ 03 февраля 2011

См. Мой комментарий к исходному вопросу о том, как включить внутреннее ведение журнала NLog.

Чтобы включить внутреннее ведение журнала NLog, измените верхнюю часть конфигурации NLog, чтобы она выглядела следующим образом:

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.mono2.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       
      autoReload="true"       
      internalLogLevel="Trace"       
      internalLogFile="nlog_log.log"       
> 

Ключевые части - internalLogLevel и internalLogFile.

Вы также можете установить internalLogToConsole на true или false, чтобы направлять внутреннюю запись в журнал на консоль.

Существует другая настройка throwExceptions, которая сообщает NLog,не бросать исключения.Обычно для этого параметра устанавливается значение false, если регистрация успешно настроена и работает.Вы можете установить значение true, чтобы определить, связана ли ваша проблема с ошибкой NLog.

Итак, если у вас включены все эти опции, верхняя часть конфигурации NLog может выглядеть так:

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.mono2.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       
      autoReload="true"       
      internalLogLevel="Trace"       
      internalLogFile="nlog_log.log"       
      internalLogToConsole="true"
      throwExceptions="true"
> 

Мое первое предположение - NLog не находит информацию о конфигурации.Используете ли вы внешний конфигурационный файл (NLog.config) или «встроенную» конфигурацию (в вашем app.config или web.config)?В вашем проекте ваши конфигурационные файлы помечены (в свойствах) как «Всегда копировать»?

...