分布式日志2 用redis的队列写日志
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.Mvc;
- using ServiceStack.Redis;
- namespace 分布式日志
- {
- public class MyExceptionFilter : HandleErrorAttribute
- {
- #region 用c#的队列
- //public static Queue<Exception> listQueue = new Queue<Exception>();
- //public override void OnException(ExceptionContext filterContext)
- //{
- // if (filterContext.Exception!=null)
- // {
- // listQueue.Enqueue(filterContext.Exception);
- // filterContext.HttpContext.Response.Redirect("/error.html");
- // }
- // base.OnException(filterContext);
- //}
- #endregion
- #region 用redis的队列
- public static IRedisClientsManager clientsManager=new PooledRedisClientManager(new string[]{"127.0.0.1:6379"});
- public static IRedisClient redisClient=clientsManager.GetClient();
- public override void OnException(ExceptionContext filterContext)
- {
- if (filterContext.Exception != null)
- {
- redisClient.EnqueueItemOnList("exception",filterContext.Exception.ToString());//入队
- filterContext.HttpContext.Response.Redirect("/error.html");
- }
- base.OnException(filterContext);
- }
- #endregion
- }
- }
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading;
- using System.Web;
- using System.Web.Mvc;
- using System.Web.Optimization;
- using System.Web.Routing;
- namespace 分布式日志
- {
- public class MvcApplication : System.Web.HttpApplication
- {
- protected void Application_Start()
- {
- AreaRegistration.RegisterAllAreas();
- FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
- RouteConfig.RegisterRoutes(RouteTable.Routes);
- BundleConfig.RegisterBundles(BundleTable.Bundles);
- //通过线程池开启一个线程,然后不停的从队列中读取数据
- string strRoot = Server.MapPath("/Log/");
- string strPath = strRoot + DateTime.Now.ToString("yyyy-MM-dd").ToString()+".txt";
- ThreadPool.QueueUserWorkItem(i =>
- {
- while (true)
- {
- #region c# 队列
- //try
- //{
- // if (MyExceptionFilter.listQueue.Count > 0)
- // {
- // Exception ex = MyExceptionFilter.listQueue.Dequeue();
- // if (ex != null)
- // {
- // System.IO.File.AppendAllText( strPath,DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ex.ToString() + Environment.NewLine,System.Text.Encoding.UTF8);
- // }
- // else
- // {
- // Thread.Sleep(30);
- // }
- // }
- // else
- // {
- // Thread.Sleep(30);//避免cpu空转
- // }
- //}
- //catch(Exception ex)
- //{
- // MyExceptionFilter.listQueue.Enqueue(ex);
- //}
- #endregion
- #region redis 队列
- string strKey = "exception";
- try
- {
- )
- {
- string strMsg = MyExceptionFilter.redisClient.DequeueItemFromList(strKey);
- if (!string.IsNullOrEmpty(strMsg))
- {
- System.IO.File.AppendAllText(strPath, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + strMsg + Environment.NewLine, System.Text.Encoding.UTF8);
- }
- else
- {
- Thread.Sleep();
- }
- }
- else
- {
- Thread.Sleep();//避免cpu空转
- }
- }
- catch (Exception ex)
- {
- MyExceptionFilter.redisClient.EnqueueItemOnList(strKey, ex.ToString());
- }
- #endregion
- }
- }, strPath);
- }
- }
- }
- using System.Web;
- using System.Web.Mvc;
- namespace 分布式日志
- {
- public class FilterConfig
- {
- public static void RegisterGlobalFilters(GlobalFilterCollection filters)
- {
- //filters.Add(new HandleErrorAttribute());
- filters.Add(new MyExceptionFilter());
- }
- }
- }
分布式日志2 用redis的队列写日志的更多相关文章
- 分布式日志1 用c#的队列写日志
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- 重复造轮子,编写一个轻量级的异步写日志的实用工具类(LogAsyncWriter)
一说到写日志,大家可能推荐一堆的开源日志框架,如:Log4Net.NLog,这些日志框架确实也不错,比较强大也比较灵活,但也正因为又强大又灵活,导致我们使用他们时需要引用一些DLL,同时还要学习各种用 ...
- python 14篇 写日志
import sys from loguru import logger # 日志级别: debug 调试信息打印日志比较详细,级别最低 # info 正常的提示信息,级别较低 # waring 警告 ...
- Redis 自定义 RedisAppender 插件, 实现日志缓冲队列,集中日志输出.
因为某些异步日志设置了即使队列满了,也不可丢弃,在并发高的时候,导致请求方法同步执行,响应变慢. 编写这个玩意,除了集中日志输出以外,还希望在高并发的时间点有缓冲作用. 之前用Kafka实现了一次入队 ...
- 利用StackExchange.Redis和Log4Net构建日志队列
简介:本文是一个简单的demo用于展示利用StackExchange.Redis和Log4Net构建日志队列,为高并发日志处理提供一些思路. 0.先下载安装Redis服务,然后再服务列表里启动服务(R ...
- java-spring基于redis单机版(redisTemplate)实现的分布式锁+redis消息队列,可用于秒杀,定时器,高并发,抢购
此教程不涉及整合spring整合redis,可另行查阅资料教程. 代码: RedisLock package com.cashloan.analytics.utils; import org.slf4 ...
- c# 多线程使用队列顺序写日志的类 (需要再优化)
using System; using System.Collections.Generic; using System.Threading; public class LogManager { // ...
- Docker部署Django项目+Nginx+Fluend日志收集 和redis、memcached、RabbitMQ、Celery
前言 一.docker 1.docker是什么? Docker的英文本意是“搬运工”,Docker搬运的是集装箱(Container)可以成为容器,我可以把写的Django的WEB应用以及Python ...
- ELK(+Redis)-开源实时日志分析平台
################################################################################################### ...
随机推荐
- yum安装rz和sz
yum install lrzsz
- eclipse下tomcat插件配置说明
- 发送SMS短信(JSON) 转载
http://blog.csdn.net/ldl22847/article/details/42553883 public static string GetMobileConfByUserId( ...
- SQL语句 DML,DDL,DCL
数据控制语言(DCL)是用来设置或者更改数据库用户或角色权限的语句,这些语句包括GRANT.DENY.REVOKE等语句,在默认状态下,只有 sysadmin.dbcreator.db_owner或d ...
- 设置arc/非arc
1,选择项目中的Targets,选中你所要操作的Target,2,选Build Phases,在其中Complie Sources中选择需要ARC的文件双击, 并在输入框中输入:-fobjc- ...
- Symfony2 资料篇
http://www.chrisyue.com/symfony2-in-action-day-1.html 由于Symfony2现在还没有很完善的中文文档,所以不想看文档的同学可以直接进行点击上面的链 ...
- MySQL安装过程net start mysql 启动失败 报“错误2,系统找不到文件”的解决办法
MySQL安装过程net start mysql 启动失败 报“错误2,系统找不到文件”的解决办法 错误2,系统找不到文件. 开始...运行... regedit 注册表项: HKEY_LOCAL_ ...
- 删除sde用户问题
删除SDE用户(GIS地图数据用户),长时间删除没反应,结束drop user sde cascade命令后,重新执行,结果报ORA-00604 ORA-21700 select user_id,us ...
- Oracle客户端与服务器字符集不统一的处理
当Oracle客户端与服务器的字符集不统一时. 症状: 如:ORA-00283: ?????????? 提示信息中有好多问号. 解决方法: 1查询服务器的字符集: SQL> conn / as ...
- Linux C学习笔记06--Tlist使用(编程工具篇)
为了方便用VIM编程,安装了一个方便的小工具 taglist,下面是taglist使用的一些说明. 常用的taglist配置选项,可以根据自己的习惯进行配置: Tlist_Ctags_Cmd选项用于指 ...