利用StackExchange.Redis和Log4Net构建日志队列

简介:本文是一个简单的demo用于展示利用StackExchange.Redis和Log4Net构建日志队列,为高并发日志处理提供一些思路。

0、先下载安装Redis服务,然后再服务列表里启动服务(Redis的默认端口是6379,貌似还有一个故事)(https://github.com/MicrosoftArchive/redis/releases)

利用StackExchange.Redis和Log4Net构建日志队列_第1张图片


1、nuget中安装Redis:Install-Package StackExchange.Redis -version 1.2.6

2、nuget中安装日志:Install-Package Log4Net -version 2.0.8

3、创建RedisConnectionHelp、RedisHelper类,用于调用Redis。由于是Demo我不打算用完整类,比较完整的可以查阅其他博客(例如:https://www.cnblogs.com/liqingwen/p/6672452.html)

 View Code

 View Code

4、创建log4net的配置文件log4net.config。设置属性为:始终复制、内容。

 View Code

5、创建日志类LoggerFunc、日志工厂类LoggerFactory

 View Code

 View Code

6、创建本章最核心的日志队列设置类LogQueueConfig。

ThreadPool是线程池,通过这种方式可以减少线程的创建与销毁,提高性能。也就是说每次需要用到线程时,线程池都会自动安排一个还没有销毁的空闲线程,不至于每次用完都销毁,或者每次需要都重新创建。但其实我不太明白他的底层运行原理,在内部while,是让这个线程一直不被销毁一直存在么?还是说sleep结束后,可以直接拿到一个线程池提供的新线程。为什么不是在ThreadPool.QueueUserWorkItem之外进行循环调用?了解的童鞋可以给我留下言。

 View Code

7、在项目的Global.asax文件中,启动队列线程。本demo由于是在winForm中,所以放在form中。

public Form1()

        {

            InitializeComponent();

            RedisLogQueueTest.CommonFunc.LogQueueConfig.RegisterLogQueue();//启动日志队列}

8、调用日志类LoggerFunc.SaveErrorLogTxT(),插入日志。

LoggerFunc log = LoggerFactory.CreateLoggerInstance();

            log.SaveErrorLogTxT("您插入了一条随机数:"+longStr);

9、查看下入效果

利用StackExchange.Redis和Log4Net构建日志队列_第2张图片


利用StackExchange.Redis和Log4Net构建日志队列_第3张图片

你可能感兴趣的:(利用StackExchange.Redis和Log4Net构建日志队列)