Nlog ASP.Net Core с неработающей целью поиска Elastic - PullRequest
0 голосов
/ 20 сентября 2018

NLog.Config целевой объект эластичного поиска:

  <target name="elasticWrapper" xsi:type="BufferingWrapper" flushTimeout="5000">
          <target xsi:type="ElasticSearch"
                  name="elastic"
                  connectionStringName="ElasticUrl"
                  index="logs-${date:format=yyyy.MM.dd}"
                  documentType="logevent"
                  includeAllProperties="true"
                  layout="${message}">       
          </target>
        </target>

Атрибут connectionstringname для объекта эластичного поиска используется для получения информации из appsettings.json

appsettings.json показан ниже

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  },
  "ConnectionStrings": {
    "ElasticUrl": "http://XXXXXX-XXXXXX:9200"
  }
}

Файл Program.cs из проекта .Net Core, как показано ниже

public static void Main(string[] args)
{
    var config = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .Build();

    NLogBuilder.ConfigureNLog("nLog.config");
    foreach (var setting in config.GetChildren().ToDictionary(x => x.Key, x => x.Value))
    {
        LogManager.Configuration.Variables[setting.Key] = setting.Value;
    }
    var logger = LogManager.GetCurrentClassLogger();  
    var host = WebHost.CreateDefaultBuilder(args)                   
                      .UseContentRoot(Directory.GetCurrentDirectory())
                      .UseNLog()  
                      .Build();

        host.Run();     

}

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Мне удалось заставить его работать программно.

public static void Main(string[] args)
{
    var config = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .Build();

    var logFactory = LogManager.LoadConfiguration("nLog.config");

    foreach (var setting in config.GetChildren().ToDictionary(x => x.Key, x => x.Value))
    {
        logFactory.Configuration.Variables[setting.Key] = setting.Value;
    }

    var target = logFactory.Configuration.FindTargetByName("elastic") as ElasticSearchTarget;
    target.Uri = config.GetConnectionString("ElasticUrl");

    NLogBuilder.ConfigureNLog("nLog.config");
    var logger = LogManager.GetCurrentClassLogger();  
    var host = WebHost.CreateDefaultBuilder(args)                   
                      .UseContentRoot(Directory.GetCurrentDirectory())
                      .UseNLog()  
                      .Build();

        host.Run();     

}
0 голосов
/ 21 сентября 2018

Попробуйте изменить пару вещей

  1. Добавьте целевой файл, чтобы увидеть, распознает ли ваша конфигурация Nlog.
  2. Переименуйте Nlog.config в nlog.config и пометьте значение свойств файла ввсегда копируйте в выходной каталог.
  3. Убедитесь, что вы добавили пакет NLog.Targets.ElasticSearch в свой проект.

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

Дайте мне знать, если ваша проблема все еще сохраняется.Я предоставлю код для настройки nlog через код.

...