ElasticSearch+NLog实现.net core分布式日志管理

概述

 Elasticsearch可广泛应用于日志分析、全文检索、结构化数据分析等多种场景,大幅度降低维护多套专用系统的成本,在开源社区非常受欢迎。在系统中,如果将日志作为文件输出,查看系统日志将非常不便;如果将日志保存到数据库中,又不能进行全文搜索。在这里我们将日志输出到ElasticSearch中,借助Kibana再查找日志。

实现方式

1、配置es服务地址

 

{
  "ConnectionStrings": {
    "ElasticSearchServerAddress": "http://localhost:9200"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*"
}

 

2、配置nlog.config

 

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      internalLogToConsole="true">
  <extensions>
    <add assembly="NLog.Targets.ElasticSearch"/>
  </extensions>

  <targets>
    <!--ElasticSearch保存日志信息-->
    <target name="ElasticSearch" xsi:type="ElasticSearch" ConnectionStringName="ElasticSearchServerAddress"
            index="userapi-${date:format=yyyy.MM.dd}" documentType="doc" includeAllProperties="true"
                 layout="[${date:format=yyyy-MM-dd HH\:mm\:ss}][${level}] ${logger} ${message} ${exception:format=toString}">
      <field name="MachineName" layout="${machinename}" />
      <field name="Time" layout="${longdate}" />
      <field name="level" layout="${level:uppercase=true}" />
      <field name="logger" layout=" ${logger}" />
      <field name="message" layout=" ${message}" />
      <field name="exception" layout=" ${exception:format=toString}" />
      <field name="processid" layout=" ${processid}" />
      <field name="threadname" layout=" ${threadname}" />
      <field name="stacktrace" layout=" ${stacktrace}" />
      <field name="Properties" layout="${machinename} ${longdate} ${level:uppercase=true} ${logger} ${message} ${exception}|${processid}|${stacktrace}|${threadname}" />
    </target>
  </targets>
  <rules>
    <logger name="*" minlevel="INFO" writeTo="ElasticSearch" />
  </rules>
</nlog>

 

3、测试写入日志

 

 // GET api/values
        [HttpGet]
        public ActionResult<IEnumerable<string>> Get()
        {
            var result = new string[] { "value1", "value2" };
            _logger.LogInformation(JsonConvert.SerializeObject(result));
            return result;
        }

 

效果

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于在.NET Core中使用Elasticsearch,您可以使用官方提供的Elasticsearch .NET客户端库。这个库为您提供了一个简单而强大的方式来与Elasticsearch进行交互。 首先,您需要在.NET Core项目中安装Elasticsearch .NET客户端库。您可以通过NuGet包管理器或通过命令行来执行安装。在安装完成后,您可以在代码中导入所需的命名空间。 接下来,您需要与Elasticsearch建立连接。您可以使用`ConnectionSettings`类来配置连接参数,例如Elasticsearch服务器的URL、索引名称等。然后,使用`ElasticClient`类创建一个客户端实例来执行各种操作,如索引创建、文档插入、搜索等。 以下是一个简单的示例代码,演示如何在.NET Core中使用Elasticsearch进行基本操作: ``` using Elasticsearch.Net; using Nest; class Program { static void Main(string[] args) { var settings = new ConnectionSettings(new Uri("http://localhost:9200")) .DefaultIndex("your_index_name"); var client = new ElasticClient(settings); // 创建索引 var createIndexResponse = client.Indices.Create("your_index_name", c => c .Map<Document>(m => m.AutoMap()) ); // 插入文档 var document = new Document { Id = 1, Title = "Hello World", Content = "This is a sample document" }; var indexResponse = client.IndexDocument(document); // 搜索文档 var searchResponse = client.Search<Document>(s => s .Query(q => q .Match(m => m .Field(f => f.Title) .Query("Hello") ) ) ); // 输出搜索结果 foreach (var hit in searchResponse.Hits) { Console.WriteLine($"Id: {hit.Source.Id}, Title: {hit.Source.Title}, Content: {hit.Source.Content}"); } } } public class Document { public int Id { get; set; } public string Title { get; set; } public string Content { get; set; } } ``` 这只是一个简单的示例,您可以根据自己的需求扩展和定制。希望对您有所帮助!如果您有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值