前言:

前两天在查找如何扩展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. WIN8系统安装软件时提示"扩展属性不一致"的解决方法

    单位新添加了两台T440P笔记本电脑,需要安装五笔输入法,同事一直安装不上.开始以为是WIN8系统跟输入法不兼容的问题,怀疑是输入法下载有误.于是直接在输入法官网下载了输入法,问题依旧:扩展属性不一致 ...

  2. Web应用程序项目以配置使用IIS。未找到Web服务器

    解决办法 右键编辑该Web项目的csproj文件 把UserIIS改为False.或者在IIS服务器里面配置一个IISUrl里面的地址 如图

  3. Cutterman 切图神器,虽然还没用过,先 mark 一下好了

    在官网上找了半天也没发现下载链接,注册账号用无法激活,还是等等再试吧.

  4. this的面面观

    http://www.cnblogs.com/Wayou/p/all-this.html <JavaScript语言精粹> 全局this 浏览器宿主的全局环境中, function f(x ...

  5. Application.DoEvents():概念

    When you run a Windows Form, it creates the new form, which then waits for events to handle. Each ti ...

  6. GAT2.0使用文档(单接口开发)

    3   开始写用例 3.1接口用例开发 1)         准备工作 l  第一步从github(https://github.com/GeneralAutomationTesting/GAT2.0 ...

  7. asp.net 加载xml到menu

    XML File <?xml version="1.0" encoding="utf-8" ?> <Area iAreaID ="0 ...

  8. EntityFramework Core 学习笔记 —— 包含与排除属性

    原文地址:https://docs.efproject.net/en/latest/modeling/included-properties.html 在模型中包含一个属性意味着 EF 拥有了这个属性 ...

  9. 2016年12月25日 星期日 --出埃及记 Exodus 21:20

    2016年12月25日 星期日 --出埃及记 Exodus 21:20 "If a man beats his male or female slave with a rod and the ...

  10. selenium—JS点击方法

    package com.allin.pc;import java.util.NoSuchElementException;import org.openqa.selenium.By;import or ...