Не уверен, если это ясно, но с целью базы данных одно сообщение журнала будет одной записью в базе данных.Я бы порекомендовал прочитать учебник .Также в этом случае хорошо бы проверить параметры базы данных цели .
Ваша конфигурация не работает, так как ${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" - нет.