在 appsetting Nlog 中配置以在 Seq 中写入

Configure in the appsetting Nlog to write in Seq

我在 net core 中有一个应用程序,该应用程序在 SeqLog 中写入所有日志,我使用 Nlog 来配置所有内容,到目前为止我使用了一个 .xml 文件来为 Nlog 提供所有有用的信息正确操作。 浏览互联网我看到可以使用 appsetting 而不是用 xml 编写的 .config 文件来声明所有设置。 现在我想删除这个 .config 文件并在 appsetting 中写入所有内容,所以我开始编写所有内容并且它似乎可以工作,除了一件小事: 这是我的 .config 文件的样子:

<targets>
        <target name="seq" xsi:type="Seq" serverUrl="https://....." apiKey="....." >
            <property name="Application" value="Name Application" />
            <property name="MachineName" value="localhost" />
            <property name="Environment" value="TEST" />
            <property name="Body" value =" ${aspnet-request-posted-body}" />
            <property name="Source" value="${logger}" />
            <parameter name="@json" layout="${event-properties:item=JsonMessage}" />
            <parameter name="@error" layout="${event-properties:item=ErrorMessage}" />
        </target>
    </targets>
    <rules>
        <logger name="*" minlevel="Info" writeTo="seq" />
    </rules>

然后把所有的东西都传到appsetting里面,是这样的:

"NLog": {
    "extensions": [
      { "assembly": "NLog.Targets.Seq" }
    ],
    "targets": {
      "seq": {
        "type": "Seq",
        "serverUrl": "https://.....",
        "apiKey": "........",
        "propertys": [
          {
            "name": "Application",
            "value": "Application_name"
          },
          {
            "name": "MachineName",
            "value": "localhost"
          },
          {
            "name": "Environment",
            "value": "TEST"
          },
          {
            "name": "Body",
            "value": "${aspnet-request-posted-body}"
          },
          {
            "name": "Source",
            "value": "${logger}"
          }
        ],
        "parameters": [
          {
            "name": "@json",
            "layout": "${event-properties:item=JsonMessage}"
          },
          {
            "name": "@error",
            "layout": "${event-properties:item=ErrorMessage}"
          }
        ]
      }   
  },
    "rules": [
      {
        "logger": "*",
        "minLevel": "Info",
        "writeTo": "seq"
      }
    ]
  },

问题是没有读取属性,所以应该写我的seqlog例如主体或机器名称,没有,我在互联网上没有找到我声明的方式属性和参数是正确的,但在这一点上我假设它不是,所以我想知道在appsetting中声明属性和参数的正确方法是什么?

会不会也是Program.cs配置的问题? 这是我写的:

    var config = new ConfigurationBuilder()
        .SetBasePath(System.IO.Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.Development.json", optional: true, reloadOnChange: true).Build();
        
     LogManager.Configuration = new NLogLoggingConfiguration(config.GetSection("NLog"));

            var logger = NLogBuilder.ConfigureNLog(LogManager.Configuration).GetCurrentClassLogger();
            try
            {
                logger.Debug("init main");
                var host = CreateHostBuilder(args).Build();
                CreateDbIfNotExists(host);
                host.Run();
            }

我试图在 seqlog 上打印在 appsetting 中声明的属性,但这些都没有打印出来。 我尝试多次更改语法但结果没有改变

作为答案发布以帮助人们找到答案 - 但 Rolf Kristensen 的评论看起来像是正确答案。

这是来自datalust/nlog-targets-seq

的示例
    {
  "NLog": {
    "throwConfigExceptions": true,
    "targets": {
      "seq": {
        "type": "BufferingWrapper",
        "bufferSize": 200,
        "flushTimeout": 2000,
        "slidingTimeout": false,
        "target": {
          "type": "Seq",
          "serverUrl": "http://localhost:5341",
          "apiKey": "",
          "properties": [
          {
            "name": "Source",
            "value": "${Logger}",
          },
          {
            "name": "ThreadId",
            "value": "${ThreadId}",
            "as": "number"
          },
          {
            "name": "MachineName",
            "value": "${MachineName}",
          }]
        }
      }
    },
    "rules": [
    {
      "logger": "*",
      "minLevel": "Info",
      "writeTo": "seq"
    }]
  }
}