2017-02-22 51 views
0

У меня есть следующий файл конфигурации NLogконфигурация NLog не работает, как ожидалось

<?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" 
     xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd" 
     autoReload="true" 
     throwExceptions="false" 
     internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log"> 

    <!-- optional, add some variables 
    https://github.com/nlog/NLog/wiki/Configuration-file#variables 
    --> 
    <variable name="myvar" value="myvalue"/> 

    <!-- 
    See https://github.com/nlog/nlog/wiki/Configuration-file 
    for information on customizing logging rules and outputs. 
    --> 
    <targets> 
    <target 
     name="logfile" 
     xsi:type="File" 
     fileName="log.txt" 
     archiveFileName="log.{#}.txt" 
     archiveNumbering="DateAndSequence" 
     archiveAboveSize="1000000" 
     archiveDateFormat="yyyyMMdd" 
    /> 
    <target 
     name="byteArrayLogfile" 
     xsi:type="File" 
     fileName="log.ba.txt" 
     archiveFileName="log.ba.{#}.txt" 
     archiveNumbering="DateAndSequence" 
     archiveAboveSize="1000000" 
     archiveDateFormat="yyyyMMdd" 
     /> 
    <target 
     name="console" 
     xsi:type="Console" /> 
    </targets> 


    <rules> 
    <logger name="StackTraceLogger" minlevel="Warn" maxlevel="Error" writeTo="logfile" layout="${longdate}|${threadid}|${callsite-linenumber:skipFrames=Integer}|${level:uppercase=true}|${message}${newline}${exception:format=tostring}" final="true"/> 
    <logger name="ByteArrayLogger" minlevel="Debug" writeTo="byteArrayLogfile" layout="${longdate}|${threadid}|${level:uppercase=true}${newline}${message}" final="true"/> 
    <logger name="Ctrack.DMT.*" minlevel="Debug" writeTo="logfile" layout="${longdate}|${threadid}|${callsite-linenumber:skipFrames=Integer}|${level:uppercase=true}|${logger}|${message}" /> 
    <logger name="Ctrack.DMT.*" minlevel="Trace" writeTo="console" layout="${longdate}|${threadid}|${callsite-linenumber:skipFrames=Integer}|${level:uppercase=true}|${logger}|${message}" /> 
    <logger name="ServerForm.*" minlevel="Debug" writeTo="logfile" layout="${longdate}|${threadid}|${callsite-linenumber:skipFrames=Integer}|${level:uppercase=true}|${logger}|${message}" /> 
    <logger name="ServerForm.*" minlevel="Trace" writeTo="console" layout="${longdate}|${threadid}|${callsite-linenumber:skipFrames=Integer}|${level:uppercase=true}|${logger}|${message}" /> 
    </rules> 
</nlog> 

Цель состоит в том, чтобы:

  1. послать что-нибудь из библиотеки классов или WinForm на уровне следов + к консоль
  2. отправить все из библиотеки классов или winform на уровне отладки + в файл журнала
  3. отправить anyth ING от ByteArrayLogger до byteArrayLogfile
  4. отправить все из ExceptionLogger в лог-файл, используя немного другой макет

Каждый класс имеет следующие до верхней:

private static Logger logger = LogManager.GetCurrentClassLogger(); 
private static Logger loggerEL = LogManager.GetLogger("ExceptionLogger"); 
private static Logger loggerBA = LogManager.GetLogger("ByteArrayLogger"); 

Шаги к исключение журнала

string message = "Exception while trying to save " + Name + " to the database."; 
logger.Error("{0}|{1}", MethodName, message); 
loggerEL.Error(ex, "{0}|{1}", MethodName, message); 

Stacktraces могут быть перемещены в отдельный файл в ближайшем будущем

вещи, которые не работают

  • Нет ID потока. Интересно, нет недостающих | разделитель
  • Нет номеров строк. Интересно, нет недостающих | separator
  • Исключения не указаны в файле журнала. Они должны быть в файле, но используя другой макет
  • консоль показывают элементы уровня DEBUG

Кроме того, Intellisense выдвигает на первый план расположения и говорящие The 'layout' attribute is not declared как предупреждение.

+0

принимая Джулианс ответ. Будет опубликован новый вопрос с обновленными изменениями и проблемами – Hecatonchires

ответ

0

Кроме того, Intellisense - это hilighting layout и говорит, что атрибут «layout» не объявлен как предупреждение.

В этом случае это также ошибка. layout должен быть на <target>, а не на <logger>

Так

<targets> 
    <target 
     name="logfile" 
     xsi:type="File" 
     fileName="log.txt" 
     archiveFileName="log.{#}.txt" 
     archiveNumbering="DateAndSequence" 
     archiveAboveSize="1000000" 
     archiveDateFormat="yyyyMMdd" 
layout="${longdate}|${threadid}|${callsite-linenumber:skipFrames=Integer}|${level:uppercase=true}|${message}${newline}${exception:format=tostring}" 
    /> 
    ... 

и

<rules> 
    <logger name="StackTraceLogger" minlevel="Warn" 
      maxlevel="Error" writeTo="logfile" final="true" /> 
    ... 
</rules> 
+0

Хорошо, это в основном работает. Если бы более внимательно посмотреть на страницу вики, нужно было бы изменить '$ {callsite-linenumber: skipFrames = Integer}' на '$ {callsite-linenumber: skipFrames = 0}'. Все еще не регистрируемые исключения – Hecatonchires

+0

Возможно, проблема заключается в ваших правилах регистрации. Рекомендовать сначала протестировать с помощью самого простого правила. – Julian

 Смежные вопросы

  • Нет связанных вопросов^_^