记录日志到elasticsearch(es),下面简写es,然后我们可以通过kibana可视化的观察日志信息以及统计分析等.

1.起源

  年中旬时候,公司有个需求是需要分析用户的地址,需要先分词处理然后通过搜索引擎匹配相关数据,当然这个不是这里说的重点,主题还是日志 to es,也就是日志传入es,这里我们还是借助开源的作品,感谢提供者.

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>

同时在 startup.cs中的configure方法中注入 IHostingEnvironment env对象,通过 env配置nlog,参考如下:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
} app.UseCors("cors");
loggerFactory.AddNLog();
env.ConfigureNLog("nlog.config");
app.UseMvc();
}

这里需要添加nlog同时指定我们自定义的nlog.config的配置文件,这样就完了.这时候会报错,因为少了文件,也就是一个第三方的资源包

3.使用到的资源

使用nuget导入对应的binary对象 nuget: install-package NLog.Targets.ElasticSearch,,这里的相关配置说明如下:
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
  autoReload="true"
  throwExceptions="false"
  internalLogLevel="Off“
  internalLogFile="c:\temp\nlog-internal.log">
  xmlns=“http://www.nlog-project.org/schemas/NLog.xsd” 这表示默认命名空间;xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 这个命名空间里面的元素或者属性就必须要以xsi:这种方式来写 比如schemaLocation就是他的一个属性,所以写成xsi:schemaLocation 而默认命名空间不带类似xsi这种,其实xml标签名称有个专业叫法叫做QName,而如果没有前面的xsi:这种一般叫做NCName xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd" 表示把定义这个命名空间的schema文件给引用进来,好让开发类型工具能够解析和验证你的xml文件是否符合语法规范 等同于
简单来说 上面是用来验证你XML格式是否正确的。
  InternalLogFile="c:\log\nlog.txt" //NLog内部日志文件位置 internalLogLevel="Debug" //日志级别 autoReload:一旦启动程序,这时候NLog.config文件被读取后,知道程序再启动都不会再读取配置文件了。假如我们不想停掉程序,比如说服务器哪能说停就停哈。这就用上这个配置了,这个配置功能是,一旦你对配置文件修改,程序将会重新读取配置文件,也就是自动再配置。
  throwExceptions//NLog日志系统抛出异常 internalLogFile="c:\log\nlog.txt" //NLog内部日志文件位置 internalLogLevel="Debug" //日志级别- 定义配置文件中用到的变量 - 定义日志的目标/输出 - 定义日志的路由规则

Layout布局
  几种常见的 ${var:basePath} basePath是前面自定义的变量 ${longdate} 日期格式 2017-01-17 16:58:03.8667 ${shortdate}日期格式 2017-01-17 ${date:yyyyMMddHHmmssFFF} 日期 20170117165803866 ${message} 输出内容 ${guid} guid ${level}日志记录的等级 ${logger} 配置的logger

NLog记录等级
  Trace - 最常见的记录信息,一般用于普通输出 Debug - 同样是记录信息,不过出现的频率要比Trace少一些,一般用来调试程序 Info - 信息类型的消息 Warn - 警告信息,一般用于比较重要的场合 Error - 错误信息 Fatal - 致命异常信息。一般来讲,发生致命异常之后程序将无法继续执行。 自上而下,等级递增。

NLog等级使用
  指定特定等级 如:level="Warn" 指定多个等级 如:levels=“Warn,Debug“ 以逗号隔开 指定等级范围 如:minlevel="Warn" maxlevel="Error"

Logger使用
从配置文件读取信息并初始化 两种常用的方式
  根据配置的路由名获生成特定的logger Logger logger = LogManager.GetLogger("LoggerDemo");
  初始化为当前命名空间下当前类的logger Logger logger = LogManager.GetCurrentClassLogger();
  区别是logger的name不一样 前者是LoggerDemo,后者是当前命名空间+点+当前类名 如类比较多,并且往同一个日志文件记录,建议用GetCurrentClassLogger

Logger有以下三种常用的写入方式
  logger.Error("这是DatabaseDemo的错误信息"); logger.Error(“ContentDemo {0}:{1}”,“时间”,DateTime.Now.ToString());需要拼接字符串的话推荐这种,NLog做了延迟处理,用的时候才拼接。 logger.Log(LogLevel.Error, "这是ContentDemo");

Logger发邮件参数
  smtpServer=“” 邮件服务器 例如126邮箱是smtp.126.com smtpPort=“25“端口 smtpAuthentication=“Basic“ 身份验证方式 基本 smtpUserName=““ 邮件服务器用户名 smtpPassword=“**”邮件服务器密码 enableSsl=“false”是否使用安全连接 需要服务器支持 addNewLines=“true” 开头与结尾是否换行 from=“” 发件邮箱 to=“XXXX@XX.com,XXXXX@XX.com”收件邮箱 多个以逗号分隔 subject=“subject:${machinename}报错“ 邮件主题 header=“---------------------开头-------------------------“ 邮件开头 body=“${newline}${message}${newline}“ 邮件内容 footer=“---------------------结尾-------------------------“ 邮件结尾

ABP 开源框架中配置参考

<!--write logs to file-->

<target xsi:type="File" name="allfile" fileName="${logDirectory}\nlog-all-${shortdate}.log"
layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" /> <target xsi:type="File" name="ownFile-web" fileName="nlog-my-${shortdate}.log"
layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" /> <target xsi:type="Null" name="blackhole" />
<!--Skip Microsoft logs and so log only own logs-->
<logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
<logger name="*" minlevel="Trace" writeTo="ownFile-web" />

资源地址:

通过nuget gallery查询获取:

https://www.nuget.org/packages?q=NLog.Targets.ElasticSearch

通过igthub获取:

https://github.com/markmcdowell/NLog.Targets.ElasticSearch

.net core 2.x - 日志 - to elasiticsearch的更多相关文章

  1. .NET Core下的日志(1):记录日志信息

    记录各种级别的日志是所有应用不可或缺的功能.关于日志记录的实现,我们有太多第三方框架可供选择,比如Log4Net.NLog.Loggr和Serilog 等,当然我们还可以选择微软原生的诊断机制(相关A ...

  2. ASP.NET Core 异常处理与日志记录

    1. ASP.NET Core 异常处理与日志记录 1.1. 异常处理 1.1.1. 异常产生的原因及处理 1.1.2. ASP.NET Core中启动开发人员异常页面 1.2. 日志记录 1.2.1 ...

  3. asp.net core 集成 log4net 日志框架

    asp.net core 集成 log4net 日志框架 Intro 在 asp.net core 中有些日志我们可能想输出到数据库或文件或elasticsearch等,如果不自己去实现一个 Logg ...

  4. 玩转ASP.NET Core中的日志组件

    简介 日志组件,作为程序员使用频率最高的组件,给程序员开发调试程序提供了必要的信息.ASP.NET Core中内置了一个通用日志接口ILogger,并实现了多种内置的日志提供器,例如 Console ...

  5. asp.net core 系列 13 日志

    一.概述 ASP.NET Core 支持适用于各种内置和第三方日志记录, 供程序的日志记录 API,本文介绍了如何将日志记录 API 与内置提供程序一起使用.对于第三方日志记录提供程序使用,文章最后有 ...

  6. ASP.NET Core 中的日志记录

    目录 内置日志的使用 使用Nlog 集成ELK 参考 内置日志的使用 Logger 是 asp .net core 的内置 service,所以我们就不需要在ConfigureService里面注册了 ...

  7. (14)ASP.NET Core 中的日志记录

    1.前言 ASP.NET Core支持适用于各种内置和第三方日志记录提供应用程序的日志记录API.本文介绍了如何将日志记录API与内置提供应用程序一起使用. 2.添加日志提供程序 日志记录提供应用程序 ...

  8. 第七节:Asp.Net Core内置日志和整合NLog(未完)

    一. Asp.Net Core内置日志 1. 默认支持三种输出方式:控制台.调试(底部输出窗口).EventSource,当然也可以在Program类中通过logging.ClearProviders ...

  9. .NET Core 中的日志与分布式链路追踪

    目录 .NET Core 中的日志与分布式链路追踪 .NET Core 中的日志 控制台输出 非侵入式日志 Microsoft.Extensions.Logging ILoggerFactory IL ...

随机推荐

  1. jap篇 之 JSTL标签库

    JSTL标签库: JSTL: JSP Standard Tag Library 作用:和[EL配合]使用,可以让用户[尽可能少的使用java源码]. 1,导入jar包 导入(复制粘贴到项目中的lib目 ...

  2. 02Lua入门

    前言: 语言学起来其实相似点很多,简单整理的知识点 目录: 1.使用控制台 2.Lua基础 3.变量 4.运算符 5.控制结构 1.使用控制台 Lua脚本是包含一系列Lua命令的简单脚本(扩展名为.l ...

  3. 【XSY3156】简单计数II 容斥 DP

    题目大意 定义一个序列的权值为:把所有相邻的相同的数合并为一个集合后,所有集合的大小的乘积. 特别的,第一个数和最后一个数是相邻的. 现在你有 \(n\) 种数,第 \(i\) 种有 \(c_i\) ...

  4. MT【313】特征方程逆用

    已知实数$a,b,x,y$满足\begin{equation}\left\{ \begin{aligned} ax+by &= 3 \\ ax^2+by^2&=7\\ ax^3+by^ ...

  5. 配置sudo记录日志

    sudosudo命令用来以其他身份来执行命令,预设的身份为root.在/etc/sudoers中设置了可执行sudo指令的用户.若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员.用户使用 ...

  6. GWAS条件分析(conditional analysis)

    一.为什么要做GWAS的条件分析(conditional analysis) 我们做GWAS的时候,经常扫出一堆显著的信号,假设rs121是我们扫出来与某表型最显著相关的位点(P=1.351e-36) ...

  7. Pandas系列(七)-计算工具介绍

    内容目录 1. 统计函数 2. 窗口函数 3. 加深加强 数据准备 # 导入相关库 import numpy as np import pandas as pd #Pandas 中包含了非常丰富的计算 ...

  8. Windows启动过程(MBR引导过程分析)

    catalogue . 电脑启动过程 . MBR分析(master boot record) - 位于整个硬盘的 扇区 . DBR(DOS boot record) - 位于柱面0,磁头1,扇区1,即 ...

  9. CMDB资产管理系统开发【day27】:理解RESTful架构

    理解RESTful架构 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(hig ...

  10. NOI-OJ 2.2 ID:1696 逆波兰表达式

    思路 很容易看出规律,一个运算符出现,其后就一定需要左值和右值,而左值和右值有可能还是运算符,这就需要继续递归.递归终止的条件就是遇到数字. 逆波兰表达式其实是构造成了一颗二叉树 例程 #includ ...