很多小步快跑的公司,开发人员多则3-4个,面对巨大业务压力,日连夜的赶着上线,快速试错,自然就没时间搭建一些基础设施,比如说logCenter,但初期
项目不稳定,bug又多,每次都跑到生产去找日志,确实也不大方便,用elk或者用hadoop做日志中心,虽然都是没问题的,但基于成本和人手还是怎么简化怎么来,
本篇就来说说直接使用log4net的ElasticSearchAppender扩展直接将log写入到es中。
一:从nuget下载
可以从github上找到log4net.ElasticSearch项目的源码。https://github.com/jptoto/log4net.ElasticSearch。
1. App.config配置
nuget包下来之后,就可以配置config文件了,其实还是蛮简单的,大家可以根据自己的项目合理的配置里面的各项参数,为了方便大家理解,我在每个配置
项上加了详细的注释,大家可以仔细看看。
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> </configSections> <log4net> <!-- 日志的处理类:log4net.ElasticSearch.ElasticSearchAppender --> <appender name="ElasticSearchAppender" type="log4net.ElasticSearch.ElasticSearchAppender, log4net.ElasticSearch"> <!-- ES地址 rolling=true:表示每天一个index(datamipcrm_log_2018.05.31) --> <connectionString value="Scheme=http;Server=192.168.23.145;Index=datamiprm_log;Port=9200;rolling=true"/> <!-- 有损配置: 如果配置的buffer满了还没来的及刷新到es中,那么新来的log将会被丢弃。 --> <lossy value="false" /> <evaluator type="log4net.Core.LevelEvaluator"> <!-- 表示 小于ERROR级别的日志会进入buffer数组,大于等于这个级别的,直接提交给es。 通常情况下,ERROR级别的错误,我们直接塞到ES中,这样更有利于我们发现问题。 DEBUG,INFO WARN ERROR --> <threshold value="ERROR" /> </evaluator> <!-- buffer池的阈值50,一旦满了就会触发flush 到 es的动作(bulk api) --> <bufferSize value="50" /> </appender> <root> <!-- 指定所有的loglevel(DEBUG,INFO,WARN,ERROR)级别都是用 ElasticSearchAppender 处理 --> <level value="ALL"/> <appender-ref ref="ElasticSearchAppender" /> </root> </log4net> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" /> </startup> </configuration>