Как зарегистрировать одну таблицу SQL, используя NLog в C #? - PullRequest
0 голосов
/ 27 сентября 2019

Я пытаюсь зарегистрировать одну таблицу, используя NLog, минуя значения параметров в каждом столбце, используя NLog.Но почему-то я не смог войти в таблицу SQL.

Я попытался передать значения, передав код, подобный этому, и добавил цели и правила в web.config.

Код в классе

private static Logger _logger;

public CustomToken()
{
    _logger = LogManager.GetLogger("apiUsageLogger");
}

_logger.Info("{clientname}", "test");
_logger.Info($"clientusername", "test");
_logger.Info($"route", "test");
_logger.Info($"parameters", "test");
_logger.Info($"isuserauthenticated", 1);

В сети.config

<target name="apiUsageLog" xsi:type="Database" connectionStringName="connStringName">
        <commandtext>
          INSERT INTO Table
          (ClientName, ClientUserName, Route, Parameters, IsUserAuthenticated, Machine)
          VALUES
          (@clientname, @clientusername, @route, @parameters, @isuserauthenticated, @machine)
        </commandtext>
        <parameter name="@clientname" layout="${clientname}" />
        <parameter name="@clientusername" layout="${clientusername}" />
        <parameter name="@route" layout="${route}" />
        <parameter name="@parameters" layout="${parameters}" />
        <parameter name="@isuserauthenticated" layout="${isuserauthenticated}" />
        <parameter name="@machine" layout="${machinename}" />
      </target>
    </targets>
    <rules>
      <<logger name="apiUsageLogger" minlevel="Info" writeTo="apiUsageLog" />
    </rules>

Каким-то образом данные не заполняются в таблицу.

Есть ли способ, которым я могу достичь при заполнении данных в соответствующие столбцы?NLog это правильный способ сделать это?

1 Ответ

0 голосов
/ 28 сентября 2019

Не уверен, если это ясно, но с целью базы данных одно сообщение журнала будет одной записью в базе данных.Я бы порекомендовал прочитать учебник .Также в этом случае хорошо бы проверить параметры базы данных цели .

Ваша конфигурация не работает, так как ${clientusername} не существует в NLog.

Я покажу 3 примера, надеюсь, что все прояснит

Пример 1: простойрегистрирует в целевую базу данных

вызов регистратора:

logger.Info("my info message");

config:

<target name="apiUsageLog" xsi:type="Database" connectionStringName="connStringName">
    <commandtext>
        INSERT INTO Table
        (message, machinename)
        VALUES
        (@message, @machinenameParam)
    </commandtext>
    <parameter name="@messageParam" layout="${message}" /> <!-- this will be "my info message"-->
    <parameter name="@machinenameParam" layout="${machinename}" /> <!-- defined in NLog, see https://nlog-project.org/config/?tab=layout-renderers-->
    </target>
</targets>

Это создаст запись журнала в базе данных с my info message и именем машины.

Пример 2: с пользовательскими свойствами:

Я буду использовать структурированное ведение журнала здесь.См. структурированное ведение журнала

Вызов регистратора:

logger.Info("my info message with {Property1}", "value1");

config:

<target name="apiUsageLog" xsi:type="Database" connectionStringName="connStringName">
    <commandtext>
        INSERT INTO Table
        (message, machinename, property1)
        VALUES
        (@message, @machinenameParam, @propertyParam1)
    </commandtext>
    <parameter name="@messageParam" layout="${message}" /> <!-- this will be "my info message"-->
    <parameter name="@machinenameParam" layout="${machinename}" /> <!-- defined in NLog, see https://nlog-project.org/config/?tab=layout-renderers-->
    <parameter name="@propertyParam1" layout="${event-properties:Property1}" /> <!-- this will be "value1" -->
    </target>
</targets>

Это создаст запись журнала в базе данных с my info message with "Value1", имя компьютера и настраиваемое свойство со значением «value1».

Пример 3: настраиваемые свойства, не все в сообщении

Это объединяет структурированное ведение журнала и WithProperty.Для этого вам нужен как минимум NLog 4.6.3.

Вызов регистратора:

logger.WithProperty("Property2", "value2")
      .Info("my info message {Property1}", "value1");

config:

<target name="apiUsageLog" xsi:type="Database" connectionStringName="connStringName">
    <commandtext>
        INSERT INTO Table
        (message, machinename, property1, property2)
        VALUES
        (@message, @machinenameParam, @propertyParam2)
    </commandtext>
    <parameter name="@messageParam" layout="${message}" /> <!-- this will be: my info message with "value1"-->
    <parameter name="@machinenameParam" layout="${machinename}" /> <!-- defined in NLog, see https://nlog-project.org/config/?tab=layout-renderers-->
    <parameter name="@propertyParam1" layout="${event-properties:Property1}" /> <!-- this will be "value1" -->
    <parameter name="@propertyParam2" layout="${event-properties:Property2}" /> <!-- this will be "value2" -->
    </target>
</targets>

Это создаст запись журнала в базе данных сmy info message with "Value1", имя компьютера и пользовательские свойства "value1" и "value2"

Обратите внимание, что теперь "value1" находится в сообщении, а "value2" - нет.

...