.net core 2.x - 日志 - to elasiticsearch
记录日志到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的更多相关文章
- .NET Core下的日志(1):记录日志信息
记录各种级别的日志是所有应用不可或缺的功能.关于日志记录的实现,我们有太多第三方框架可供选择,比如Log4Net.NLog.Loggr和Serilog 等,当然我们还可以选择微软原生的诊断机制(相关A ...
- ASP.NET Core 异常处理与日志记录
1. ASP.NET Core 异常处理与日志记录 1.1. 异常处理 1.1.1. 异常产生的原因及处理 1.1.2. ASP.NET Core中启动开发人员异常页面 1.2. 日志记录 1.2.1 ...
- asp.net core 集成 log4net 日志框架
asp.net core 集成 log4net 日志框架 Intro 在 asp.net core 中有些日志我们可能想输出到数据库或文件或elasticsearch等,如果不自己去实现一个 Logg ...
- 玩转ASP.NET Core中的日志组件
简介 日志组件,作为程序员使用频率最高的组件,给程序员开发调试程序提供了必要的信息.ASP.NET Core中内置了一个通用日志接口ILogger,并实现了多种内置的日志提供器,例如 Console ...
- asp.net core 系列 13 日志
一.概述 ASP.NET Core 支持适用于各种内置和第三方日志记录, 供程序的日志记录 API,本文介绍了如何将日志记录 API 与内置提供程序一起使用.对于第三方日志记录提供程序使用,文章最后有 ...
- ASP.NET Core 中的日志记录
目录 内置日志的使用 使用Nlog 集成ELK 参考 内置日志的使用 Logger 是 asp .net core 的内置 service,所以我们就不需要在ConfigureService里面注册了 ...
- (14)ASP.NET Core 中的日志记录
1.前言 ASP.NET Core支持适用于各种内置和第三方日志记录提供应用程序的日志记录API.本文介绍了如何将日志记录API与内置提供应用程序一起使用. 2.添加日志提供程序 日志记录提供应用程序 ...
- 第七节:Asp.Net Core内置日志和整合NLog(未完)
一. Asp.Net Core内置日志 1. 默认支持三种输出方式:控制台.调试(底部输出窗口).EventSource,当然也可以在Program类中通过logging.ClearProviders ...
- .NET Core 中的日志与分布式链路追踪
目录 .NET Core 中的日志与分布式链路追踪 .NET Core 中的日志 控制台输出 非侵入式日志 Microsoft.Extensions.Logging ILoggerFactory IL ...
随机推荐
- Platform.Uno介绍
编者语:Xamarin国内很多人说缺乏可用的实例,我在写书过程中在完善一些常用场景的例子,希望帮到大家.Build 2018结束一周了,善友问我要不要谈谈Xamarin的一些变化,但碍于时间有限一直没 ...
- 洛谷 P3380 【【模板】二逼平衡树(树套树)】
其实比想象中的好理解啊 所谓树套树,就是在一棵树的基础上,每一个节点再维护一棵树 说白了,就是为了实现自己想要的操作和优秀的时间复杂度,来人为的增加一些毒瘤数据结构来维护一些什么东西 比如说这道题 如 ...
- x86汇编语言实践(1)
0 写在前面 为了更深入的了解程序的实现原理,近期我学习了IBM-PC相关原理,并手工编写了一些x86汇编程序. 在2017年的计算机组成原理中,曾对MIPS体系结构及其汇编语言有过一定的了解,考虑到 ...
- apache beam ElasticSearchIO 遇到异常后job中断执行 自己定制beam IO
可以将 ElasticSearchIO.java 源码拷贝至自己的项目.改名为MyElasticSearchIO.java.自己定制实现.这时编译会遇到auto.value失败.在pom.xml中加入 ...
- 【Linux网络编程】TCP网络编程中connect()、listen()和accept()三者之间的关系
[Linux网络编程]TCP网络编程中connect().listen()和accept()三者之间的关系 基于 TCP 的网络编程开发分为服务器端和客户端两部分,常见的核心步骤和流程如下: conn ...
- python6-深浅拷贝 元组类型 字典类型 集合类型
一,深浅拷贝 (一) 值拷贝:应用场景最多 案例:1.ls = [1, 'abc', [10]] ls1 = ls # :ls1直接将ls中存放的地址拿过来# : ls内部的值发 ...
- solr的域
solrhom相当于存放数据的地方,里面一个个文件相当于数据库,每个数据库里面有两个文件夹,一个data,一个conf,conf下有一个schema.xml文件,配置域,相当于表的字段. solr中内 ...
- Hadoop记录- Yarn scheduler队列采集
#!/bin/sh ip=10.116.100.11 port=8088 export HADOOP_HOME=/app/hadoop/bin rmstate1=$($HADOOP_HOME/yarn ...
- 纯css美化下拉框、复选框以及单选框样式并用jquery获取到其被选中的val
具体样式如图所示: 注:获取val值时记得要先引入jquery库奥. 1.下拉框 css部分 #cargo_type_id{ font-size: 13px; border: solid 1px #b ...
- css 常用的绝对定位元素水平垂直居中的方法
两种方法都能够实现: 1. div { height:80%; /*一定要设置高度*/ overflow:hidden;/*建议设置*/ margin: auto; position: absolut ...