【问题标题】:Nlog ASP.Net Core with Elastic search target not working具有弹性搜索目标的 Nlog ASP.Net Core 不起作用
【发布时间】:2019-02-24 15:52:54
【问题描述】:

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"
  }
}

.Net Core 项目中的 Program.cs 文件,如下所示

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

}

【问题讨论】:

  • 你试过ConnectionStrings:ElasticUrl 而不是ElasticUrl 吗?您是否尝试将 ElasticUrl 直接放在 config-root 中,而不是放在 ConnectionStrings-scope 中?
  • @RolfKristensen :尝试了这两种配置,但索引仍然是在我的本地主机 ES 实例上创建的,而不是在远程机器 ES 实例上创建的。

标签: c# elasticsearch asp.net-core nlog


【解决方案1】:

尝试改变一些东西

  1. 添加文件目标以查看您的配置是否被 Nlog 识别。
  2. 将 Nlog.config 重命名为 nlog.config 并将文件属性值标记为始终复制到输出目录。
  3. 确保您已将 NLog.Targets.ElasticSearch nuget 包添加到您的项目中。

我个人在容器内使用我的应用程序。所以我将整个设置移到代码中,并使用非常适合我的环境变量设置它们的值。

如果您的问题仍然存在,请告诉我。我会提供代码来通过代码配置nlog。

【讨论】:

    【解决方案2】:

    我已经设法让它以编程方式工作。

    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();     
    
    }
    

    【讨论】:

      【解决方案3】:

      扩展@Sahadevan 的答案。

      如果您使用的是 BufferingWrapper,则 findTargetByName 需要分两步进行。

       var target = logFactory.Configuration.FindTargetByName("elastic") as BufferingTargetWrapper;
       var esTarget = target.WrappedTarget as ElasticSearchTarget;
      

      示例配置:

      <target xsi:type="BufferingWrapper" name="elastic"
              flushTimeout="5000">
        <target xsi:type="ElasticSearch"
               includeAllProperties ="true">
        </target>
      </target>
              
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-11
        • 1970-01-01
        • 1970-01-01
        • 2017-05-18
        • 1970-01-01
        • 1970-01-01
        • 2016-03-28
        相关资源
        最近更新 更多