C# 队列处理日志
来源:互联网 发布:应用系统性能优化方案 编辑:程序博客网 时间:2024/06/07 14:45
<pre name="code" class="csharp">项目中的使用
public void SendMessages(object mgs) { string filePath = Server.MapPath("~/log/msgsend/msgsend" + DateTime.Now.Year + DateTime.Now.Month + DateTime.Now.Day + ".txt"); Logger.Write(filePath, mgs.ToString()); }
由于之前他们写的写日志在本地可以执行 二服务器上不能执行 之前刚好又看到有相关的日志处理 用在项目上 本地服务器都可以写入日志 由于忘记源来的那个网址了 所以没有进行网址粘贴
public class Logger { // 用于存放写日志任务的队列 private Queue<Action> _queue; // 用于写日志的线程 private Thread _loggingThread; // 用于通知是否有新日志要写的“信号器” private ManualResetEvent _hasNew; // 构造函数,初始化。 private Logger() { _queue = new Queue<Action>(); _hasNew = new ManualResetEvent(false); _loggingThread = new Thread(Process); _loggingThread.IsBackground = true; _loggingThread.Start(); } // 使用单例模式,保持一个Logger对象 private static readonly Logger _logger = new Logger(); private static Logger GetInstance() { /* 不安全代码 lock (locker) { if (_logger == null) { _logger = new Logger(); } }*/ return _logger; } // 处理队列中的任务 private void Process() { while (true) { // 等待接收信号,阻塞线程。 _hasNew.WaitOne(); // 接收到信号后,重置“信号器”,信号关闭。 _hasNew.Reset(); // 由于队列中的任务可能在极速地增加,这里等待是为了一次能处理更多的任务,减少对队列的频繁“进出”操作。 Thread.Sleep(100); // 开始执行队列中的任务。 // 由于执行过程中还可能会有新的任务,所以不能直接对原来的 _queue 进行操作, // 先将_queue中的任务复制一份后将其清空,然后对这份拷贝进行操作。 Queue<Action> queueCopy; lock (_queue) { queueCopy = new Queue<Action>(_queue); _queue.Clear(); } foreach (var action in queueCopy) { action(); } } } private void WriteLog(string filepath,string content) { lock (_queue) { // todo: 这里存在线程安全问题,可能会发生阻塞。 // 将任务加到队列 _queue.Enqueue(() => File.AppendAllText(filepath, content,System.Text.Encoding.UTF8)); } // 打开“信号” _hasNew.Set(); } // 公开一个Write方法供外部调用 public static void Write(string filePaht,string content) { // WriteLog 方法只是向队列中添加任务,执行时间极短,所以使用Task.Run。 Task.Run(() => GetInstance().WriteLog(filePaht,content)); } }
0 0
- C# 队列处理日志
- redis队列处理文件并发(日志处理)
- 文件并发(日志处理)--队列--Redis+Log4Net
- c#消息队列,事件处理(java)
- C# 多线程+队列处理大批量数据,进而缩短处理时间
- C# Application.DoEvents() 处理队列消息,防界面假死。
- C#应用消息队列异步处理数据存储
- C#多线程处理多个队列的数据
- C# 写日志,高性能批量处理 -- Logger
- C# 系统日志处理-生产者与消费者模式
- c#队列
- C#队列
- C#队列
- 日志处理
- 日志处理
- 日志处理
- 日志处理
- 日志处理
- 从TS流到PAT和PMT
- Report Studio 汇总
- 创建第一个vue应用
- MongoDB高级部分及实现(一)
- css+div布局,版心的使用(一)拉伸不会改变布局
- C# 队列处理日志
- Web实验3之CSS选择器的运用
- Kotlin的基本类型
- Jtable隔行分别颜色显示
- Thrift C++ server 线程模型
- JDBC初步学习
- BZOJ 1864
- Boyer-Moore算法-JAVA实现
- 微信 js-sdk 界面操作接口使用