NLog $ {identity} и $ {windows-identity} сохранены как «notauth» - PullRequest
0 голосов
/ 21 сентября 2018

Я работаю над проектом библиотеки классов C #, который использует NLog.NLog входит в базу данных.Я настроил тестовый проект консольного приложения для вызова библиотеки (консольное приложение не имеет регистрации).У меня есть столбец в таблице журнала для хранения имени пользователя вошедшего в систему пользователя, запустившего приложение.

В соответствии с документацией NLog, это значение сохраняется либо в ${identity}, либо в ${windows-identity}.Я пытался использовать оба, но когда журнал записывает в базу данных, значение столбца UserName равно notauth::.Как я могу это исправить?Мой 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"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      throwExceptions="false"
      internalLogLevel="Off" 
      internalLogFile="c:\temp\nlog-internal.log"
      throwConfigExceptions="true">
  <targets>
    <target name="db"
            xsi:type="Database"
            connectionString="Server=ServerName;Database=DatabaseName;Integrated Security=True;">
      <commandText>
        INSERT INTO Logs.TableName
        (
            [Level]
          , UserName
          , CallSite
          , [Message]
          , Exception
          , StackTrace
          , Logged
        )
        VALUES
        (
            @level
          , @userName
          , @callSite
          , @message
          , @exception
          , @stackTrace
          , @logged
        )
      </commandText>
      <parameter name="@level" layout="${level}" />
      <parameter name="@userName" layout="${identity}" />
      <parameter name="@callSite" layout="${callsite}" />
      <parameter name="@message" layout="${message}" />
      <parameter name="@exception" layout="${exception:tostring}" />
      <parameter name="@stackTrace" layout="${stacktrace}" />
      <parameter name="@logged" layout="${date}" />
    </target>
  </targets>
  <rules>
    <logger name="*" minlevel="Debug" writeTo="db" />
  </rules>
</nlog>

1 Ответ

0 голосов
/ 26 сентября 2018

Я думаю, что в вашем проекте есть что-то странное.Я сделал небольшое репо и получил следующие результаты:

  • ${identity} показывает действительно notauth::, это правильно, поскольку я не аутентифицируюсь для чего-то - мы используем это для IIS с формамиили аутентификация windows.

  • ${windows-identity} показывает COFFEE-LAKE\Julian - что правильно.«КОФЕ-ОЗЕРО» - это мое имя машины, и Джулиан тоже правильно :) note - ${windows-identity} никогда не будет отображать notauth:: - я проверил источник NLog

См. Репозиторий здесь: https://github.com/304NotModified/nlog-console-notauth

Во время работы в папке bin / Debug находится файл «test1.log».

примечание: он имеет следующую конфигурацию:

<?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">
  <targets>
    <target xsi:type="File" name="f"
             fileName="${basedir}/test1.log"
            layout="${longdate}|${level:uppercase=true}|${logger}|${message}|identity: '${identity}' | windows-identity: '${windows-identity}'" />
  </targets>
  <rules>
    <logger name="*" minlevel="Debug" writeTo="f" />
  </rules>
</nlog>
...