using System;
using System.Collections.Generic;
using System.Threading; public class LogManager
{
/// <summary>
/// 构造函数
/// </summary>
static LogManager ()
{
Start();
} #region 队列方法 /// <summary>
/// 日志队列
/// </summary>
private static Queue<Log> ListQueue = new Queue<Log>(); class Log
{
public string File { get; set; }
public string Msg { get; set; }
} public static void WriteLog(string logFile, string msg)
{
Log log = new Log()
{
File = logFile,
Msg = msg
}; ListQueue.Enqueue(log);
} private static void Start()//启动
{ WriteLog("ULog", "Start");
Thread thread = new Thread(threadStart);
thread.IsBackground = true;
thread.Start(); } private static void threadStart()
{
while (true)
{
if (ListQueue.Count > 0)
{
try
{
ScanQueue();
}
catch (Exception ex)
{
throw;
//LO_LogInfo.WLlog(ex.ToString());
}
}
else
{
//没有任务,休息3秒钟
Thread.Sleep(1000);
}
}
}
//要执行的方法
private static void ScanQueue()
{
while (ListQueue.Count > 0)
{
try
{
//从队列中取出
Log log = ListQueue.Dequeue();
ThreadLog(log.File, log.Msg); //Console.WriteLine(queueinfo.feedid);
//取出的queueinfo就可以用了,里面有你要的东西
//以下就是处理程序了
//。。。。。。 }
catch (Exception ex)
{
throw;
}
}
} #endregion private static string logPath = string.Empty; /// <summary>
/// 保存日志的文件夹
/// </summary>
public static string LogPath
{
get
{
if (logPath == string.Empty)
{
if (System.Web.HttpContext.Current == null)
// Windows Forms 应用
logPath = AppDomain.CurrentDomain.BaseDirectory + @"Logs\";
else
// Web 应用
logPath = AppDomain.CurrentDomain.BaseDirectory + @"Logs\";
}
return logPath;
}
set { logPath = value; }
} private static string logFielPrefix = string.Empty;
/// <summary>
/// 日志文件前缀
/// </summary>
public static string LogFielPrefix
{
get { return logFielPrefix; }
set { logFielPrefix = value; }
} /// <summary>
/// 写日志
/// </summary>
private static void ThreadLog(string logFile, string msg)
{
try
{
System.IO.StreamWriter sw = System.IO.File.AppendText(
LogPath + DateTime.Now.ToString("yyyyMMdd") +
LogFielPrefix + " " + logFile + ".Log" );
sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff : ") + msg);
sw.Close();
}
catch
{ }
} /// <summary>
/// 写日志
/// </summary>
public static void WriteLog(LogFile logFile, string msg)
{
WriteLog(logFile.ToString(), msg);
}
} /// <summary>
/// 日志类型
/// </summary>
public enum LogFile
{
Trace,
Warning,
Error,
SQL
}

  

c# 多线程使用队列顺序写日志的类 (需要再优化)的更多相关文章

  1. Delphi 写日志的类

    unit uProgLog; interface uses Windows, SysUtils, SyncObjs; const C_LOG_LEVEL_TRACE = $; C_LOG_LEVEL_ ...

  2. C#写日志工具类

    代码: using System; using System.Collections.Generic; using System.IO; using System.Linq; using System ...

  3. 在单进程单线程或单进程多线程下实现log4cplus写日志并按大小切割

    基于脚本配置来过滤log信息 除了通过程序实现对log环境的配置之外.log4cplus通过PropertyConfigurator类实现了基于脚本配置的功能.通过 脚本能够完毕对logger.app ...

  4. PHP写日志公共类

    Txl_Log.php <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); /** * * * ...

  5. C# 超高速高性能写日志 代码开源

    1.需求 需求很简单,就是在C#开发中高速写日志.比如在高并发,高流量的地方需要写日志.我们知道程序在操作磁盘时是比较耗时的,所以我们把日志写到磁盘上会有一定的时间耗在上面,这些并不是我们想看到的. ...

  6. [转]C# 超高速高性能写日志 代码开源

      1.需求 需求很简单,就是在C#开发中高速写日志.比如在高并发,高流量的地方需要写日志.我们知道程序在操作磁盘时是比较耗时的,所以我们把日志写到磁盘上会有一定的时间耗在上面,这些并不是我们想看到的 ...

  7. 写日志(log)

    已下为我自己写的一个写日志的类,比较简洁. <?php class Log { /** * @Purpose : 写日志 * @Method Name : writeLog() * @param ...

  8. C#写文本日志帮助类(支持多线程)

    代码: using System; using System.Configuration; using System.IO; using System.Threading.Tasks; namespa ...

  9. 磁盘IO单线程顺序写时最快的,如果多线程写,磁盘的磁头要不断重新寻址,所以写入速度反而会慢

    (1) 读写最好还是不要多线程,硬盘读写的速度有限,单线程时已经满负荷了,多线程又会增加线程之间的切换,会增加时间. 如果想增加读写速度,应该增加硬盘,做raid (2)首先是硬盘的写入是串行的,CP ...

随机推荐

  1. vue中解决three.js出现内存泄漏丢失上下文问题

    在跳转页面时添加以上代码即可. 在spa项目中,跳转页面并不会清楚已经创建的webgl实例,需要手动清楚.

  2. LeetCode 146. LRU缓存机制(LRU Cache)

    题目描述 运用你所掌握的数据结构,设计和实现一个  LRU (最近最少使用) 缓存机制.它应该支持以下操作: 获取数据 get 和 写入数据 put . 获取数据 get(key) - 如果密钥 (k ...

  3. 解决vue中使用laydate.js选择日期后再修改其他model时日期会被清空问题

    首先描述一下问题,下图中均绑定v-model,例如先选择出生开始时间,然后当再选择地区或其他选项时该时间就会被清空 首先看一下我这边开始的默认值,开始我设置都为空 当我选择如下图的生日开始时间与结束时 ...

  4. VSCode查询快捷键对应功能技巧

  5. easyUI之Pagination(分页)

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...

  6. js-xlsx

    XLSX.read(data, {type: type}); type主要取值如下: base64: 以base64方式读取: binary: BinaryString格式(byte n is dat ...

  7. 机器学习 - 算法 - 集成算法 - 分类 ( Bagging , Boosting , Stacking) 原理概述

    Ensemble learning - 集成算法 ▒ 目的 让机器学习的效果更好, 量变引起质变 继承算法是竞赛与论文的神器, 注重结果的时候较为适用 集成算法 - 分类 ▒ Bagging - bo ...

  8. php连接数据库的两种方式- 面向过程 面向对象

    php连接数据库的两种方式- 面向过程 面向对象   一.面向对象1. 链接数据库$conn = @new mysqli("127.0.0.1","root", ...

  9. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-5.HttpClient4.x工具获取使用

    笔记 5.HttpClient4.x工具获取使用     简介:讲解httpClient4.x相关依赖,并封装基本方法. 1.加入依赖         <dependency>       ...

  10. Map构造器模式 map builder pattern

    maven引入依赖 <dependency> <groupId>com.google.guava</groupId> <artifactId>guava ...