一种多线程写日志文件的解决方案 c#源代码演示
using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
using System.IO;
using System.Timers;
namespace ComUtil
{
    public class LogWriter
    {
        private LogWriter()
        {
            logtimer.Stop();
            logtimer.Elapsed += new ElapsedEventHandler(logtimer_Elapsed);
        }
private  void logtimer_Elapsed(object sender, ElapsedEventArgs e)
        {
            string rootpath = System.AppDomain.CurrentDomain.BaseDirectory;
if (!Directory.Exists(rootpath + "\\logs"))
            {
                Directory.CreateDirectory(rootpath + "\\logs");
            }
while(LogList.Count>0)
            {
                StreamWriter Writer = new StreamWriter(rootpath + "\\logs\\" + LogList[0]["logfilename"].ToString(), true);
                StringBuilder wb = new StringBuilder();
wb.Append("[");
                wb.Append(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                wb.Append("]");
                wb.Append("[");
                wb.Append(LogList[0]["logtype"].ToString());
                wb.Append("]");
                wb.Append(LogList[0]["msg"].ToString());
                wb.Append("\r\n");
                Writer.Write(wb.ToString());
                wb = wb.Remove(0, wb.Length);
                Writer.Flush();
                Writer.Close();
LogList.RemoveAt(0);
            }
logtimer.Stop(); //关闭定时器
}
private List<Hashtable> LogList = new List<Hashtable>();
        private static LogWriter mInstance = null;
private Timer logtimer = new Timer(1000);
public static LogWriter GetInstance()
        {
            if (mInstance==null)
            {
                mInstance = new LogWriter();
            }
            return mInstance;
        }
public void WriteMessage(string msg,string logtype,string logfilename)
        {
Hashtable newlog = new Hashtable();
            newlog.Add("msg", msg);
            newlog.Add("logtype", logtype);
            newlog.Add("logfilename", logfilename);
            LogList.Add(newlog);
            logtimer.Start();
        }
}
}
一种多线程写日志文件的解决方案 c#源代码演示的更多相关文章
- [转]ASP.NET Core 开发-Logging 使用NLog 写日志文件
		本文转自:http://www.cnblogs.com/Leo_wl/p/5561812.html ASP.NET Core 开发-Logging 使用NLog 写日志文件. NLog 可以适用于 . ... 
- ASP.NET Core 开发-Logging 使用NLog 写日志文件
		ASP.NET Core 开发-Logging 使用NLog 写日志文件. NLog 可以适用于 .NET Core 和 ASP.NET Core . ASP.NET Core已经内置了日志支持,可以 ... 
- C#多线程写日志
		由于程序是3层架构的,所有多线程记录日志成了比较棘手的问题,以前还真就没有在意过写日志的问题,认为不过是写文件罢了~~!如今发现原来要实现文件共享,并且能够使多线程同时操作日志还不能相互冲突,真的很麻 ... 
- Log4j写日志文件使用详解
		Log4j输出到控制台成功,写入文件失败 - Log4j和commons log的整合 一.今天在使用commongs-logging.jar和log4j.properties来输出系统日志的时候,发 ... 
- .net core 2.0使用NLog写日志文件
		原文地址:传送门 之前也看了 linezero 大佬写的教程,但是总是没有成功写入日志文件.按照 曲廉卿 的已成功,以下正文: 最近研究了一下NLog的使用方式,简单的入了一下门. 实现的功能,对于不 ... 
- 为何要打印日志?C++在高并发下如何写日志文件(附源码)?
		为何要打印日志?让程序裸奔不是一件很快乐的事么? 有些BUG就像薛定谔的猫,具有波粒二象性,当你试图去观察它时它就消失了,当你不去观察它时,它又会出现.当你在测试人员面前赌咒发誓,亲自路演把程序跑一遍 ... 
- kettle作业中的js如何写日志文件
		在kettle作业中JavaScript脚本有时候也扮演非常重要的角色,此时我们希望有一些日志记录.下面是job中JavaScript记录日志的方式. job的js写日志的方法. 得到日志输出实例 o ... 
- Java 多线程写zip文件遇到的错误 write beyond end of stream!
		最近在写一个大量小文件直接压缩到一个zip的需求,由于zip中的entry每一个都是独立的,不需要追加写入,也就是一个entry文件,写一个内容, 因此直接使用了多线程来处理,结果就翻车了,代码给出了 ... 
- php服务端写日志文件
		1.需求 在服务端记录日志 2.基础版 最基础的文件读写,(要注意window和linux的换行符,window是\r\n,linux是\n),这里就写入一个时间. <?php $handle ... 
随机推荐
- BZOJ.4819.[SDOI2017]新生舞会(01分数规划 费用流SPFA)
			BZOJ 洛谷 裸01分数规划.二分之后就是裸最大费用最大流了. 写的朴素SPFA费用流,洛谷跑的非常快啊,为什么有人还T成那样.. 当然用二分也很慢,用什么什么迭代会很快. [Update] 19. ... 
- 【BZOJ】3751: [NOIP2014]解方程【秦九韶公式】【大整数取模技巧】
			3751: [NOIP2014]解方程 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 4856 Solved: 983[Submit][Status ... 
- 面向企业级的开源WebGIS解决方案--MapGuide(对比分析)
			在技术特点.功能.架构等方面,MapGuide与其他WebGIS产品有什么区别?本文主要从此角度来介绍MapGuide的特性,以供参考. 本人选择了比较熟悉的几款WebGIS产品:MapServ ... 
- 用docker搭建ss访问火星
			最近弄了个vultr的VPS,便想用它搭个梯子访问火星.由于vultr是支持docker的,便找了个ss的docker镜像: https://hub.docker.com/r/mritd/shadow ... 
- MongoDB简单使用 —— 基本操作
			本身MongoDB直接支持的是Bson文档,Bson文档在C#的官方驱动中对应的是BsonDocument类: var bsonDoc = new BsonDocument(){ [" ... 
- 利用dynamic简化数据库的访问
			今天写了一个数据库的帮助类,代码如下. public static class DbEx { public static dynamic ReadToObject(this IDataReader r ... 
- Java 线程第三版 第四章 Thread Notification 读书笔记
			一.等待与通知 public final void wait() throws InterruptedException 等待条件的发生. public final void wait(lo ... 
- STM32 HAL drivers < STM32F7 >
			Overview of HAL drivers The HAL drivers were designed to offer a rich set of APIs and to interact ea ... 
- TCP套接字端口复用SO_REUSEADDR
			下面建立的套接字都是tcp套接字 1.进程创建监听套接字socket1,邦定一个指定端口,并接受了若干连接.那么进程创建另外一个套接口socket2,并试图邦定同一个端口时候,bind错误返回“Add ... 
- 基於tiny4412的Linux內核移植 --- 实例学习中断背后的知识(2)
			作者:彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台 tiny4412 ADK Linux-4.9 概述 前面一篇博文基於tiny4412的Linux內核移 ... 
