Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。

     在我们的项目中可以使用es很方便的对日志进行记录,.netcore项目中结合NLog使用也是非常的简洁易用,上手很快,下面就分享一下我在项目中的使用的一些小的心得供大家参考。

1、安装说明

1.登录ElasticSearch官网,找到Download,下载windows的安装包

2.下载完毕,会在电脑里面生成一个名称为elasticsearch-7.11.2.zip的压缩包

3.把解压后的文件夹放到C盘

4.打开cmd窗口,cd进入elasticsearch-7.11.2目录,运行命令.\bin\elasticsearch.bat 启动服务

5.打开powershell,输入 Invoke-RestMethod http://localhost:9200 ,有下图则说明安装成功,服务可用

2.使用说明

1.新建一个.netcore mvc项目,测试使用nlog+elastic search记录日志

2.添加项目nuget包引用

NLog.Web.AspNetCore
NLog.Targets.ElasticSearch

3.添加nlog.config文件

其中rule中的writeto的值对应target中的name,以用来区分是写入es还是写入文件中

<?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"
      autoReload="true"
      internalLogLevel="Warn"
      internalLogFile="${basedir}\logs\internal-nlog.txt">
    <extensions>
        <add assembly="NLog.Targets.ElasticSearch"/>
    </extensions>
    <targets>
        <target name="allfile" xsi:type="File"
                fileName="${basedir}\logs\GDStationaryNetCore\${shortdate}.log"
                encoding="utf-8"
                layout="[${longdate}][${machinename}][${level}] ${message} ${exception}" />
    </targets>
    <targets>
        <!--ElasticSearch保存日志信息-->
        <target name="ElasticSearch" xsi:type="ElasticSearch"  uri="http://localhost:9200/"
                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>

其中program.cs中

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
            .ConfigureServices((host, svc) =>
            {
                svc.AddLogging((loggerbuilder) =>
                {
                    loggerbuilder.ClearProviders();
                    NLogBuilder.ConfigureNLog($"nlog.config");
                    //如果区分生产和测试环境
                    //System.Console.WriteLine($"env:{host.HostingEnvironment.EnvironmentName}");
                    //NLogBuilder.ConfigureNLog($"Config/NLog.{host.HostingEnvironment.EnvironmentName}.config");
                    loggerbuilder.AddNLog();
                    loggerbuilder.AddConsole();
                });
            })
            .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseNLog().UseStartup<Startup>();
                });

3.查看写入的数据

可以安装谷歌插件 Elastic Search Head进行日志数据的查看与过滤

 

 

其中上面的索引对应的是nlog.config文件中的 index="userapi-${date:format=yyyy.MM.dd}" ,这样的话可以每天自动建立一个索引

4.自定义添加字段

为了方便筛选、查询,有可能我们需要在写入es的时候,指定添加某些字段,如下所示:

 

只需要在写入时使用以下的语法即可:

这样会方便日志的筛查搜索,极大的提高日志查询的命中效率

 

以上便是简单的在.netcore项目中集成使用elastic search进行日志记录的方法了。查看工具也可以使用kibana可视化工具,此处不做展开。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐