Asp.NetCore+Elasticsearch+Kibana日志记录

之前看留言一篇关于Elasticsearch搜索引擎的文章,今天试着用Elasticsearch写了一下日志统计的Demo,下面就记录一下 Asp.NetCore+Elasticsearch+Kibana日志记录 的使用过程

一、安装Elasticsearch

1、下载 Elasticsearch  https://www.elastic.co/cn/downloads/elasticsearch 

2、 解压文件 找到 bin 目录下 elasticsearch.bat 文件 双击运行

3、 你会在控制台看到

访问 http://127.0.0.1:9200/ 你会看到如下返回格式,说明 elasticsearch 安装成功

{
  "name" : "PC-20150622CPXX",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "EvGRrqQiRSuJVe4tsc4NSw",
  "version" : {
    "number" : "7.3.0",
    "build_flavor" : "default",
    "build_type" : "zip",
    "build_hash" : "de777fa",
    "build_date" : "2019-07-24T18:30:11.767338Z",
    "build_snapshot" : false,
    "lucene_version" : "8.1.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

 

二、创建项目

三、添加Nuget包

Install-Package NLog.Web.AspNetCore
Install-Package NLog
Install-package NLog.Targets.ElasticSearch

四、编写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>
    <target name="ElasticSearch" xsi:type="ElasticSearch" 
            ConnectionStringName="http://localhost:9200" 
            index="Jon.NLog-${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>

配置文件说明:

ConnectionStringName:连接字符串

Index:ES索引

documentType:ES类型

layout:布局

layout可配置变量如下:

 

$ {activityid} - 将一个System.Diagnostics跟踪关联ID放入日志中。
$ {all-event-properties} - 记录所有事件上下文数据。
$ {appdomain} - 当前的应用程序域。
$ {assembly-version} - 默认应用程序域中可执行文件的版本。
$ {basedir} - 当前应用程序域的基本目录。
$ {callsite} - 呼叫站点(类名称,方法名称和源信息)。
$ {callsite-linenumber} - 呼叫站点源行号。
$ {counter} - 一个计数器值(每个布局渲染都会增加)。
$ {currentdir} - 应用程序的当前工作目录。
$ {date} - 当前日期和时间。
$ {document-uri} - 托管当前Silverlight应用程序的HTML页面的URI。
$ {environment} - 环境变量。
$ {event-properties} - 记录事件属性数据 - 重命名$ {event-context}。
$ {exception} - 通过调用其中一个Logger * Exception()方法提供的异常信息。
$ {file-contents} - 渲染指定文件的内容。
$ {gc} - 关于垃圾收集器的信息。
$ {gdc} - 全局诊断上下文项目。字典结构来保存每个应用程序实例值。
$ {guid} - 全局唯一标识符(GUID)。
$ {identity} - 线程标识信息(名称和认证信息)。
$ {install-context} - 安装参数(传递给InstallNLogConfig)。
$ {level} - 日志级别。
$ {literal} - 一个字符串文字。
$ {log4jxmlevent} - 与log4j,Chainsaw和NLogViewer兼容的XML事件描述。
$ {logger} - 记录器名称。
$ {longdate} - 日期和时间格式很长,可排序yyyy-MM-dd HH:mm:ss.ffff。
$ {machinename} - 进程正在运行的机器名称。
$ {mdc} - 映射的诊断上下文 - 一个线程局部结构。
$ {mdlc} - 异步映射的诊断上下文 - 一个线程局部结构。
$ {message} - 格式化的日志消息。
$ {ndc} - 嵌套的诊断上下文 - 一个线程局部结构。
$ {ndlc} - 异步嵌套诊断上下文 - 一个线程局部结构。
$ {newline} - 换行符。
$ {nlogdir} - NLog.dll所在的目录。
$ {performancecounter} - 性能计数器。
$ {processid} - 当前进程的标识符。
$ {processinfo} - 关于正在运行的进程的信息。
$ {processname} - 当前进程的名称。
$ {processtime} - 格式为HH:mm:ss.mmm的处理时间。
$ {qpc} - 高精度计时器,基于从QueryPerformanceCounter()返回的值(可选地转换为秒)。
$ {registry} - 来自注册表的值。
$ {sequenceid} - 日志序列标识
$ {shortdate} - 可排序格式的短日期yyyy-MM-dd。
$ {sl-appinfo} - 有关Silverlight应用程序的信息。
$ {specialfolder} - 系统特殊文件夹路径(包括我的文档,我的音乐,程序文件,桌面等)。
$ {stacktrace} - 堆栈跟踪渲染器。
$ {tempdir} - 一个临时目录。
$ {threadid} - 当前线程的标识符。
$ {threadname} - 当前线程的名称。
$ {ticks} - 当前日期和时间的Ticks值。
$ {time} - 以24小时可排序格式HH:mm:ss.mmm的时间。
$ {var} - 渲染变量(4.1中新增)
$ {windows-identity} - 线程Windows身份信息(用户名)。
包装
$ {cached}
- 将缓存应用于另一个布局输出。 $ {filesystem-normalize} - 通过用安全字符替换文件名中不允许的字符。 $ {json-encode} - 使用JSON规则转义另一个布局的输出。 $ {lowercase} - 将另一个布局输出的结果转换为小写。 $ {onexception} - 仅在为日志消息定义异常时才输出内部布局。 $ {pad} - 将填充应用于另一个布局输出。 $ {replace} - 用另一个字符串替换另一个布局输出中的字符串。 $ {replace-newlines} - 用另一个字符串替换换行符。 $ {rot13} - 用ROT-13解码“encrypted”文本。 $ {trim-whitespace} - 修剪另一个布局渲染器的结果中的空白。 $ {uppercase} - 将另一个布局输出的结果转换为大写。 $ {url-encode} - 编码另一个布局输出的结果以用于URL。 $ {when} - 只有在满足指定条件时才输出内部布局。 $ {whenEmpty} - 当内部布局产生空结果时输出替代布局。 $ {WrapLine} - 在指定的行长度处包装另一个布局输出的结果。 $ {xml-encode} - 将另一个布局输出的结果转换为XML兼容。
NLog.Extended软件包
$ {appsetting}
- 应用程序配置设置。
NLog.Web包
$ {aspnet
-MVC-Action} - ASP.NET MVC动作名称 $ {aspnet-MVC-Controller} - ASP.NET MVC控制器名称 $ {aspnet-Application} - ASP.NET应用程序变量。 $ {aspnet-Item} - ASP.NET HttpContext项目变量。 $ {aspnet-TraceIdentifier} - ASP.NET跟踪标识符 $ {aspnet-Request} - ASP.NET请求变量。 $ {aspnet-Request-Cookie} - ASP.NET请求cookie内容。 $ {aspnet-Request-Host} - ASP.NET请求主机。 $ {aspnet-Request-Method} - ASP.NET请求方法(GET,POST等)。 $ {aspnet-Request-IP} - 客户端IP。 $ {aspnet-Request-QueryString} - ASP.NET请求查询字符串。 $ {aspnet-Request-Referrer} - ASP.NET请求引用者。 $ {aspnet-Request-UserAgent} - ASP.NET请求useragent。 $ {aspnet-Request-Url} - ASP.NET请求URL。 $ {aspnet-Session} - ASP.NET Session变量。 $ {aspnet-SessionId} - ASP.NET会话ID变量。 $ {aspnet-User-isAuthenticated} - ASP.NET用户身份验证? $ {aspnet-User-AuthType} - ASP.NET用户身份验证。 $ {aspnet-User-Identity} - ASP.NET用户变量。 $ {iis-site-name} - IIS站点名称。

五、配置后台Nlog

Program

public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseNLog()
                .UseStartup<Startup>();
    }

Startup

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory log)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }
            
            log.AddNLog();
            env.ConfigureNLog("NLog.config");//配置NLog文件

            app.UseHttpsRedirection();
            app.UseStaticFiles();
            app.UseCookiePolicy();

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });
        }

到这里,后台日志基本配置完成,下面需要使用 Kibana 来查看日志是否记录

六、安装Kibana

下面是Kibana的几种安装方式,参考 https://www.elastic.co/guide/en/kibana/current/install.html

我用的是在windows上安装Kibana

一、下载安装包

https://artifacts.elastic.co/downloads/kibana/kibana-7.3.0-windows-x86_64.zip

下载下来后解压安装包 进入bin目录下 找到 kibana.bat  双击运行该文件

 

你看到该控制台说明kibana运行成功

接下来你就可以访问 http://localhost:5601 你看到下面这个界面说明kibana已经正式运行了

接下来就该运行刚才我们写的Demo , 运行成功之后你再来到这个界面 按一下步骤操作

然后出现下面这界面,里面有一条数据就是我们刚才运行的Demo所生成的日志

 

 

 到这里整个demo就结束了

 

Elasticsearch 相关资料

 Elasticsearch官网下载 https://www.elastic.co/cn/downloads/

 Elasticsearch官网资料 https://www.elastic.co/guide/en/elasticsearch/client/net-api/7.x/elasticsearch-net-getting-started.html

 Kibana官网配置 https://www.elastic.co/guide/en/kibana/current/settings.html

 Elasticsearch权威指南(中文版) https://es.xiaoleilu.com/010_Intro/15_API.html

https://hub.docker.com/_/kibana

 

 github相关资料

https://github.com/elastic/elasticsearch

https://github.com/elastic/elasticsearch-net

https://github.com/liuzhenyulive/Elasticsearch.Net-Demo/tree/master/Elasticsearch

 

 他人博客

http://www.ruanyifeng.com/blog/2017/08/elasticsearch.html

https://www.cnblogs.com/lucky_hu/p/9746736.html

https://blog.csdn.net/qq_38762313/article/details/90290284

https://www.cnblogs.com/cjsblog/p/9476813.html

 

转载于:https://www.cnblogs.com/jimmyLei/p/11284598.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Layui是一款基于HTML5和CSS3技术开发的前端UI框架,它提供了丰富的UI组件和独特的模块化开发方式,使得前端开发更加简单和高效。Layui可以与.NET Core MVC框架无缝集成,实现前后端分离的开发模式。通过Layui,开发者可以快速构建出美观、交互丰富的网页应用。 .NET Core是由Microsoft开发的开源跨平台框架,借助它,开发者可以在Windows、Linux和macOS等多个操作系统上构建高性能的Web应用程序。使用.NET Core MVC框架可以方便地开发和管理网站的使用逻辑,与Layui相结合,可以实现前后端分离的开发模式,提高开发效率和项目可维护性。 Oracle是一种关系型数据库管理系统,具有高性能、高可靠性和强大的功能。在.NET Core MVC项目中使用Oracle数据库可以提供可靠的数据存储和管理能力。通过Oracle提供的ADO.NET驱动程序,可以方便地与.NET Core应用程序进行集成,并进行数据的读取和写入。 综上所述,结合Layui、.NET Core MVC和Oracle可以构建出一个强大的Web应用程序。Layui提供了美观且易于使用的前端组件,.NET Core MVC框架提供了稳定且高性能的开发环境,而Oracle数据库提供了可靠的数据存储和管理能力。这样的组合可以使开发者更加便捷地开发出功能齐全且用户体验良好的Web应用程序。 ### 回答2: Layui是一款基于HTML、CSS、JavaScript的前端UI框架,它提供了一套简洁易用的界面组件,能够快速搭建美观的用户界面。对于使用Layui的.NET Core MVC项目来说,可以通过在前端页面中引入Layui的CSS和JavaScript文件来使用其提供的各种组件,比如表格、表单、弹窗等,从而实现丰富的用户交互和界面展示效果。 .NET Core是微软开发的跨平台开发框架,能够支持在Windows、Linux、Mac等操作系统上运行。它的MVC框架是一种基于模型-视图-控制器的设计模式,能够将前端页面、后端业务逻辑以及数据访问分离开来,提升代码的可维护性和扩展性。在.NET Core MVC项目中,可以很方便地通过使用C#编写控制器和模型来处理业务逻辑,并将结果通过视图呈现给用户。 Oracle是一家知名的数据库管理系统提供商,它提供了强大的关系型数据库服务。在.NET Core MVC项目中使用Oracle数据库时,可以通过使用Oracle提供的.NET数据访问技术(如ODP.NET)来实现与数据库的连接和操作。借助于.NET Core MVC的数据访问技术,可以在控制器中编写代码进行数据的增删改查操作,并将结果返回给前端页面展示给用户。 综上所述,Layui、.NET Core MVC和Oracle可以很好地结合在一起,实现一个功能强大、界面美观、数据安全可靠的Web应用。通过前端的Layui框架,可以搭建出优雅的用户界面;通过.NET Core MVC框架,可以实现清晰的分层架构和灵活的业务逻辑;通过Oracle数据库,可以实现数据的持久化和高效的数据管理。这样的组合能够满足开发者和用户对于功能、性能和用户体验的要求。 ### 回答3: layui是一款基于HTML5和CSS3的前端UI框架,提供了丰富的组件和模块化的开发方式,可以快速搭建漂亮、易用的网页界面。它的特点是简洁、轻量、易学易用,适用于各种Web应用的开发。 .NET Core是微软推出的开源跨平台开发框架,它可以在Windows、Linux和Mac等多种操作系统上运行,具有高性能、可扩展性好等特点。使用.NET Core可以方便地开发各种Web应用、移动应用和云服务等。 Oracle是一家全球著名的数据库解决方案提供商,其数据库产品具有高度可靠性、安全性和可扩展性。在开发Web应用时,通过使用Oracle数据库可以实现数据的持久化和高效的数据访问操作。 综上所述,当我们使用Layui、.NET Core MVC和Oracle进行开发时,我们可以通过Layui提供的丰富的UI组件和模块化开发方式来设计网页界面,使用.NET Core MVC来开发Web应用的后端逻辑,并通过Oracle数据库实现数据的持久化和访问操作。这样的组合可以使开发过程更加高效、简便,同时满足用户对于良好界面和可靠数据存储的需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值