
ELK是Elasticsearch , Logstash, Kibana三个开源软件的简称,是集中式日志管理非常流行的解决方案。
所谓集中式日志就是将系统多个节点的日志统一收集管理,并能够提供图像化界面进行查询和分析
一套完整的集中式日志解决方案应该包括收集、传输、存储、分析、警报等特点,使用集中式日志能极大的简化运维工作。
log4net是我们经常使用的单体应用日志解决方案,使用.NET可以非常方便的使用log4net,log4net本身支持多种Appender方案,能够将日志记录到txt文本、数据库等,所以.NET 使用log4net的这个功能,集成ELK一点都不困难,而且也会影响到现有的系统,插拔方式集成非常方便。
下面我们就看一下怎样使用.NET 结合log4net实现ELK集中式日志:
.NET+ELK+log4net实现集中式日志方案步骤
我假设你已经安装好Elasticsearch和Kibana,关于Elasticsearch和Kibana的安装你可以百度一下,很多图文教程的。
我们使用一个C# console控制台程序来演示集成过程。
首先创建一个console控制台项目,如图所示:

要使用ELK,你需要一个Appender类的包,添加log4net Elastic Search的包,如下图所示:

添加App.config文件到项目的根目录,文件内容如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.8.0" newVersion="2.0.8.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<log4net>
<appender name="ElasticSearchAppender" type="log4net.ElasticSearch.ElasticSearchAppender, log4net.ElasticSearch">
<connectionString value="Server=localhost;Index=log;Port=9200;" />
<bufferSize value="0" />
</appender>
<root>
<level value="ALL" />
<appender-ref ref="ElasticSearchAppender" />
</root>
</log4net>
</configuration>你熟悉log4net一定知道这是log4net的配置,其中ElasticSearchAppender这个就是将日志记录到ElasticSearch的服务器,其中的Server、Index、Port都是你自己的配置。
然后打开你的AssemblyInfo.cs文件,添加下面这行代码:
[assembly: log4net.Config.XmlConfigurator(Watch = true)]如图所示:

修改program,添加如下的代码:
class Program
{
private static readonly ILog _log = LogManager.GetLogger(typeof(Program));
static void Main(string[] args)
{
_log.Error("kaboom!", new ApplicationException("The application exploded"));
}
}这样.NET项目的开发工作就完成了,下面我们看怎样看到运行后产生的日志。
设置 Kibana
浏览器访问Kibana站点,默认都是5601端口,在侧边栏“Management”->"Index Patterns"中添加如下图的Index,这个Index就是你配置文件中写的Index。

然后在Discover->logs*下拉框下查询就可以查找你刚刚运行Console文件尝试的日志,如下图所示:

.NET 使用log4net 集成ELK总结
以上就是.NET 使用log4net 集成ELK的全部图形示例,做之前你一定需要先安装好Elasticsearch和Kibana,log4net的加载不一定要使用AssemblyInfo文件的方式,log4net标准的文件配置加载方案都是可以的,包括log4net的配置都是可以单独使用文件加载配置的,和.NET集成log4net的方式是一致的,只需要在Appender上加上“log4net.ElasticSearch.ElasticSearchAppender, log4net.ElasticSearch”的类就可以了。希望可以帮助到遇到困难的朋友。