如何在C#中使用NLog记录单个SQL表?

问题描述 投票:0回答:1

我正在尝试使用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);

在web.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是正确的方法吗?

c# sql logging nlog
1个回答
0
投票

[不确定是否清楚,但是对于数据库目标,一条日志消息将是数据库中的一条记录。我建议阅读the tutorial。同样在这种情况下,database target options也很好检查。

您的配置不起作用,因为NLog中不存在${clientusername}。>

我将显示3个示例,希望可以使情况变得清楚

示例1:到数据库目标的简单日志

记录器调用:

logger.Info("my info message");

配置:

<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:具有自定义属性:

我将在此处使用结构化日志记录。参见structured logging

记录器调用:

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

配置:

<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");

配置:

<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”。

© www.soinside.com 2019 - 2024. All rights reserved.