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

项目一句话简介,详情点击链接去项目主页查看,最后提供打包下载:
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.
Simple REST and HTTP API Client for .NET
3.Curl
curl是利用URL语法在命令行方式下工作的开源文件传输工具。
Elasticsearch is a distributed RESTful search engine built for the cloud.
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 实现日志记录的更多相关文章
- .Net Core 实践 - 使用log4net记录日志(3)— log4net向ElasticSearch写日志
demo地址:https://github.com/PuzzledAlien/log4net_demo/tree/master/DotNetCoreConsole_V3 Windows 10 安装部署 ...
- 转:使用log4net完成程序异常日志记录(使用SQLite数据库记录和普通文本记录)
http://www.cnblogs.com/kyo-yo/archive/2010/06/11/use-log4net-to-log-exception.html 在前端时间开发的时候由于需要将异常 ...
- .Net Log4Net配置多文件日志记录
其他配置详情在网上都可以找到,但是很多看着都晕,本人就记录一下如何使用: 1.按不同级别(官方说明)可记录的日志级别有: Info.Warn.Error.Debug 2.可以按着四个配置四个输出日志路 ...
- .Net Core(.NET6)中接入Log4net和NLog进行日志记录
一.接入Log4net 1.按日期和大小混合分割日志 nuget包安装 log4net Microsoft.Extensions.Logging.Log4Net.AspNetCore 配置文件 配置文 ...
- ASP.NET Core 异常处理与日志记录
1. ASP.NET Core 异常处理与日志记录 1.1. 异常处理 1.1.1. 异常产生的原因及处理 1.1.2. ASP.NET Core中启动开发人员异常页面 1.2. 日志记录 1.2.1 ...
- Serilog 是 ASP.NET Core 的一个插件,可以简化日志记录
[翻译] ASP.NET Core 利用 Docker.ElasticSearch.Kibana 来记录日志 原文: Logging with ElasticSearch, Kibana, ASP.N ...
- Log4Net异常日志记录在asp.net mvc3.0的应用
前言 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介.本文主要是简单的介绍如何在Visual ...
- 日志记录类库log4net的使用总结
log4net是一个开源的日志记录类库,经过配置后可以自动抓取程序中的错误.异常信息,并写入磁盘,也可以在异常发生时执行其他指定的操作,比如:通知某人右键.写入数据库等.这里写个ASP.NET MVC ...
- log4net日志记录
这里是接着上一篇来优化的,上篇:ASP.NET MVC中错误日志信息记录 log4Net是用来记录日志的,可以将程序运行过程中的信息输出到一些地方(文件,数据库,EventLog等),日志就是程序的黑 ...
随机推荐
- win32下的双缓冲绘图技术
一:双缓冲原理 为了解决窗口刷新频率过快所带来的闪烁问题,利用双缓冲技术进行绘图.所谓双缓冲技术,就是将资源加载到内存,然后复制内存数据到设备DC(这个比较快),避免了直接在设备DC上绘图(这个比较慢 ...
- javascript的类、委托、事件
javascript中的类: javascript中的类 ); p2.show(); //注:Javascript中没有真正的方法重载 看起来很简单吧 ...
- ios项目总结一:开发中常用的设计模式
一.单例设计模式 1.应用场景: 程序运行期间,在内存中只有一个实例存在,主要用于资源共享,对硬件的访问等等 2.优点: 跨模块,解耦合,使用简单 3.敏捷原则: 单一职责原则 4.SDK实例: UI ...
- Git入门教程
参考文献: 1. Pro Git 2. Git教程 3. Git教程 4. 图解Git
- Android布局-TableLayout表格布局
一.表格布局-TableLayout 1.概念 表格布局采用行列的形式来管理UI的控件.表格布局适合于有规则的布局. TableRow,用来管理行,TableRow中的一个空间占据该行的一列.若不用T ...
- dom4j-1.6.1.jar与dom4j-1.4.jar
今天在上线的项目中遇到一个很奇怪的问题 File file = new File("O:/20160817/91a2cb1c-62eb-4a31-a1f6-3af8ab71782a/adi6 ...
- 提高mysql插入性能
参考地址:http://blog.jobbole.com/29432/ 参数优化: 1. SQL语句是有长度限制,在进行数据合并在同一SQL中务必不能超过SQL长度限制,通过max_allowed_p ...
- HDU 4048 Zhuge Liang's Stone Sentinel Maze
Zhuge Liang's Stone Sentinel Maze Time Limit: 10000/4000 MS (Java/Others) Memory Limit: 32768/327 ...
- RCP:如何移除Toolbar中的Quick Access
问题 自4.x开始,Quick Access搜索框成为Toolbar的"标准装备",一般删除Actionset的方式似乎不起作用,通过Quick Access,用户很容易访问到RC ...
- 基于.NET的微软ORM框架视频教程(Entity Framework技术)
基于.NET的微软ORM框架视频教程(Entity Framework技术) 第一讲 ORM映射 第二讲 初识EntifyFramework框架 第三讲 LINQ表达式查询 第四讲 LINQ方法查询 ...