国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

log4net.NoSql +ElasticSearch 實現日志記錄

2019-11-17 03:10:00
字體:
來源:轉載
供稿:網友

log4net.NoSql +ElasticSearch 實現日志記錄

前言:

前兩天在查找如何擴展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/logsecho ""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://m.survivalescaperooms.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://m.survivalescaperooms.com/shanyou/archive/2012/01/27/RestSharp.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安徽省| 隆安县| 伊宁市| 藁城市| 建阳市| 北票市| 新民市| 山东省| 山西省| 七台河市| 陵川县| 信宜市| 咸阳市| 清河县| 资溪县| 巴里| 盐津县| 育儿| 新昌县| 邵阳市| 贡嘎县| 井陉县| 原平市| 广南县| 昌图县| 久治县| 奉化市| 荣昌县| 同仁县| 河曲县| 姜堰市| 拉孜县| 天峻县| 资兴市| 新民市| 台山市| 合川市| 张家港市| 秀山| 长白| 高密市|