前言:

前两天在查找如何扩展log4net的日志格式时找到一个开源项目Log4net.NoSql,它通过扩展Appender实现了把日志输出到ElasticSearch里面。顺藤摸瓜,发现涉及的项目还挺多,于是打算学习一下,记录在此。

项目一句话简介,详情点击链接去项目主页查看,最后提供打包下载

1.log4net.nosql

A collection of log4net Appenders to NoSQL data stores. Currently only ElasticSearch is supported.

Uses RESTSharp to communicate with the ElasticSearch REST Api and contains a custom Layout, which makes use of the RESTSharp JSON Serializer to convert the LoggingEvent into JSON.

2.RestSharp

Simple REST and HTTP API Client for .NET

3.Curl

curl是利用URL语法在命令行方式下工作的开源文件传输工具。

4.elasticsearch

Elasticsearch is a distributed RESTful search engine built for the cloud.

5.elasticsearch-head 

A web front end for an Elasticsearch cluster

部署说明:

我这里是把es和log4net分开部署到两台机器的,因为es需要jdk,我不想在开发机上安装,所以把es装到xp的虚拟机上了。log4net.nosql是扩展了log4net的Layout实现了json格式的日志输出,然后扩展了Appender通过调用RestSharp把数据发送给es。Log4net的配置文件如下:

  <appender name="Elastic1" type="log4net.NoSql.Appender.ElasticSearchAppender, log4net.NoSql">
<Host value="192.168.66.90" />
<Port value="9200" />
<Index value="logs" />
<DocumentType value="apps" />
<layout type="log4net.NoSql.Layout.JsonLayout,log4net.NoSql" />
</appender>

在插入日志之前,需要先在es里建立索引,nosql提供了一个脚步log4net.NoSql-master\scripts\create_indices.bat:

curl -XDELETE localhost:9200/logs
echo "" curl -XPOST localhost:9200/logs -d '{
"_all" : {"enabled" : true},
"settings" : {
"number_of_shards" : 1
},
"mappings" : {
"apps":{
"_timestamp" : {
"enabled" : true,
"store" : true
},
"_ttl" : {
"enabled" : true,
"store" : true,
"default" : "5000"
}
}
}
}'

可惜存在几个问题:

1.window下默认没有curl运行环境

解决方法:下载一个curl-7.17.0-win32-nossl文件,把curl.exe放到script目录下

2.命令行下切换目录到script目录,运行create_indices.bat报错。

解决方法:通过错误信息可以看到把每一行的开头字符当做命令了,所以改成curl -XPOST localhost:9200/logs -d '{后面的换行去掉}'

3.再次运行还是报错,大致意思就是 ''' 不能解析。

解决方法:把-d后面和最后的单引号改成双引号。

下面是整理后的部署步骤:

1.xp,安装jdk配置JAVA_HOME环境变量

2.xp,运行两个es实例,然后运行es-head,如下图:

es路径:..\elasticsearch-1.1.1\bin\elasticsearch.bat

head路径:..\elasticsearch-head-master\index.html

3.win7,把下载的curl.exe放到NoSql下的Script目录下,修改bat文件把localhost 改成es服务器的ip地址192.168.66.90,然后运行。这样就在ES里建立了一个logs索引,如下图:

4.使用vs打开Log4net.NoSql解决方案。修改log4net.NoSql.TestHarness.log4net.config文件里的host地址为192.168.66.90.运行写入日志到es,如下图:

在这里遇到两个问题:

a.我两台机器都设置了代理,默认情况下我是访问不到192.168.66.90机器,所以去ES里查询不到日志记录。如何调试查看写入是否成功呢?

修改\log4net.NoSql-master\log4net.NoSql\Util\ElasticSearchClient.cs 38行,把返回值输出:

   //dont care about response as if it fails should not throw any exceptions
_restClient.ExecuteAsync(request, response =>
{
Debug.WriteLine(response.ToString());
});

b.写入日志成功后ES里还是查询不到数据。

在新建logs索引时指定了超时时间为5秒,所以电脑一卡5秒过去了,去es里就查询不到数据了。

结束语:

前几天在园子里看了 黑客马拉松,里面的一句话“软件开发听上去高大上,但实际很简单,全部活动可以分为两类:造轮子,搭积木。”感觉很精辟,所以才开始了这次的搭积木过程。每个项目都是了解皮毛,以后会抽时间仔细研究研究源码。这么简单的组合一下就可以解决项目中分布式日志记录和查询的需求,事半功倍。ES是基于luceuce的搜索引擎,加上分词插件,还有更多的应用场景可以去使用。

参考链接:

1.curl 命令使用http://www.cnblogs.com/wangkangluo1/archive/2012/04/17/2453975.html

2.ElasticSearch 初次使用小结,一起学习进步哈~http://ruby-china.org/topics/15337

3.ElasticSearch入门笔记http://www.qwolf.com/?p=1387

4. 分布式搜索elasticsearch集群管理工具headhttp://blog.csdn.net/laigood/article/details/8193758

5.使用RestSharp 库消费Restful Servicehttp://www.cnblogs.com/shanyou/archive/2012/01/27/RestSharp.html

log4net.NoSql +ElasticSearch 实现日志记录的更多相关文章

  1. .Net Core 实践 - 使用log4net记录日志(3)— log4net向ElasticSearch写日志

    demo地址:https://github.com/PuzzledAlien/log4net_demo/tree/master/DotNetCoreConsole_V3 Windows 10 安装部署 ...

  2. 转:使用log4net完成程序异常日志记录(使用SQLite数据库记录和普通文本记录)

    http://www.cnblogs.com/kyo-yo/archive/2010/06/11/use-log4net-to-log-exception.html 在前端时间开发的时候由于需要将异常 ...

  3. .Net Log4Net配置多文件日志记录

    其他配置详情在网上都可以找到,但是很多看着都晕,本人就记录一下如何使用: 1.按不同级别(官方说明)可记录的日志级别有: Info.Warn.Error.Debug 2.可以按着四个配置四个输出日志路 ...

  4. .Net Core(.NET6)中接入Log4net和NLog进行日志记录

    一.接入Log4net 1.按日期和大小混合分割日志 nuget包安装 log4net Microsoft.Extensions.Logging.Log4Net.AspNetCore 配置文件 配置文 ...

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

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

  6. Serilog 是 ASP.NET Core 的一个插件,可以简化日志记录

    [翻译] ASP.NET Core 利用 Docker.ElasticSearch.Kibana 来记录日志 原文: Logging with ElasticSearch, Kibana, ASP.N ...

  7. Log4Net异常日志记录在asp.net mvc3.0的应用

    前言 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介.本文主要是简单的介绍如何在Visual ...

  8. 日志记录类库log4net的使用总结

    log4net是一个开源的日志记录类库,经过配置后可以自动抓取程序中的错误.异常信息,并写入磁盘,也可以在异常发生时执行其他指定的操作,比如:通知某人右键.写入数据库等.这里写个ASP.NET MVC ...

  9. log4net日志记录

    这里是接着上一篇来优化的,上篇:ASP.NET MVC中错误日志信息记录 log4Net是用来记录日志的,可以将程序运行过程中的信息输出到一些地方(文件,数据库,EventLog等),日志就是程序的黑 ...

随机推荐

  1. MYSQL里使用正则的速度快还是使用like模糊查询语句快?

    LIKE 会略快一些.但显然LIKE的功能无法与REGEXP相比. 另外是索引的问题,LIKE有可能使用索引但REGEXP则很难.

  2. poi jar包的作用

    目前POI的最新发布版本是3.10_FINAL.该版本保护的jar包有: Maven artifactId Prerequisites JAR poi commons-logging, commons ...

  3. ftp 530 This FTP serveris anonymous only,

    引用:http://blog.sina.com.cn/s/blog_7e16680c01018ox1.html 三.遇到的问题 1.只允许匿名用户登录 现象:ftp连接过程中,提示输入用户名,输入本机 ...

  4. 企业信息系统——CRM

    客户关系管理系统(Customer Relationship Management)将客户看作是企业的一项重要资产,客户关怀是CRM的中心,其目的是与客户建立长期和有效的业务关系,在与客户的每个“接触 ...

  5. Scala入门学习笔记四--List使用

    前言 本篇将介绍一个和Array很相似的集合List,更多内容请参考:Scala教程 本篇知识点概括 List的构造 List与Array的区别 List的常用方法 List伴生对象的方法 ::和:: ...

  6. WPF:基础知识

    WPF:1.数据驱动 2.UI定义与运行逻辑分离 一. 1.编译 /t:exe 命令行程序:/t:winexe 图形用户界面程序:/t:library 动态链接库 2.启动 1)编译后生成的App.g ...

  7. python基础(内置函数+文件操作+lambda)

    一.内置函数 注:查看详细猛击这里 常用内置函数代码说明: # abs绝对值 # i = abs(-123) # print(i) #返回123,绝对值 # #all,循环参数,如果每个元素为真,那么 ...

  8. 2015弱校联盟(2) - J. Usoperanto

    J. Usoperanto Time Limit: 8000ms Memory Limit: 256000KB Usoperanto is an artificial spoken language ...

  9. 探究platform_driver中的shutdown用途

    http://blog.csdn.net/moxiaomomo/article/details/7897943 "quiesce" 说的也不太明确,我的猜测是:比如系统中有一个大功 ...

  10. sql server中如何查看执行效率不高的语句

    sql server中,如果想知道有哪些语句是执行效率不高的,应该如何查看呢?下面就将为您介绍sql server中如何查看执行效率不高的语句,供您参考.   在测量功能时,先以下命令清除sql se ...