Настройте в настройках приложения Nlog для записи в Seq

У меня есть приложение в net core, приложение записывает все журналы в SeqLog, я использовал Nlog для настройки всего, и до сих пор я использовал файл .xml, чтобы предоставить Nlog всю информацию, полезную для правильной работы. Просматривая Интернет, я увидел, что можно использовать appsetting вместо файла .config, написанного в xml, для объявления всех настроек. Теперь я хотел бы удалить этот файл .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, который должен писать мне, например, Тело или имя машины, не делает, я не нашел в Интернете, если способ, которым я задекларировал свойства и параметры правильно, но на данный момент я предполагаю, что это не так, поэтому мне интересно, как правильно объявить свойства и параметры в настройках приложений?

Может ли это быть проблемой из-за конфигурации 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();
            }

Я попытался распечатать свойства, объявленные в appsetting, в seqlog, но они не печатаются. Я несколько раз пытался изменить синтаксис, но результат не изменился

1 ответ

Размещение в качестве ответа, чтобы помочь людям найти его, но комментарий Рольфа Кристенсена выглядит как правильный ответ.

Вот пример из 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"
    }]
  }
}
Другие вопросы по тегам