一种多线程写日志文件的解决方案 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();
        }

}
}

时间: 2024-08-29 01:52:17

一种多线程写日志文件的解决方案 c#源代码演示的相关文章

程序写日志文件时该不该加锁

程序写日志文件时该不该加锁 日志(log) 为了让自己的思路更加清晰,下面我都会称日志为 log.因为日志这个词有两种含义,详情见百度百科释义或者维基百科释义. 日记的另一种说法.“志”字本身为“记录”的意思,日志就为每日的记录(通常是跟作者有关的). 服务器日志(server log),记录服务器等电脑设备或软件的运作. 我们这里说的当然是服务器日志,也就是  server log . 写入 log 一般写入 log 都会遵循以下步骤: int fd = open(path)write(fd,

ASP.NET Core 开发-Logging 使用NLog 写日志文件

ASP.NET Core 开发-Logging 使用NLog 写日志文件. NLog 可以适用于 .NET Core 和 ASP.NET Core . ASP.NET Core已经内置了日志支持,可以轻松输出到控制台. 学习Logging 组件的相关使用,使用NLog 将日志写入到文件记录. Logging 使用 新建一个 ASP.NET Core 项目,为了方便,我选择Web 应用程序,改身份验证 改为 不进行身份验证. 新建好以后,会自动引用好对应的 类库.这样我们就可以直接使用 Logge

C#多线程写日志

由于程序是3层架构的,所有多线程记录日志成了比较棘手的问题,以前还真就没有在意过写日志的问题,认为不过是写文件罢了~~!如今发现原来要实现文件共享,并且能够使多线程同时操作日志还不能相互冲突,真的很麻烦.当然要实现它我首先想到的是在网上搜,结果可能是我搜的不得其法,没发现结果,多数都是用lock,mutx等线程锁或互斥的方式写日志,偶想这样和单线程有啥区别吗?还是没能起到多线程应该有的效率! 后来问朋友,发现个log4net的东西,不过此物依然用到了线程互斥,看了源码发现的! 网络不行,朋友不知

Log4j写日志文件使用详解

Log4j输出到控制台成功,写入文件失败 - Log4j和commons log的整合 一.今天在使用commongs-logging.jar和log4j.properties来输出系统日志的时候,发现日志能够成功的输出到控制台,但是去不能写到目的文件中,具体的步骤和原因如下: 1. 只在项目中引入commons-logging.jar commons-logging.jar 使用 Log logger = LogFactory.getLogger(XXX.class), 如果有log4j.pr

c++写日志文件的操作

1 class LogFile 2 { 3 public: 4 static LogFile &instance(); 5 operator FILE *() const { return m_file; } 6 private: 7 LogFile(const char *filename) 8 { 9 m_file = fopen(filename, "a+"); 10 } 11 ~LogFile() 12 { 13 fclose(m_file); 14 } 15 FILE

修改winform安装包写日志文件权限

1.如果程序有写入文件的功能要添加该文件 并配置该属性 改成这个即可 原文地址:https://www.cnblogs.com/teng-0802/p/11776095.html

c# 日志文件的使用

以前写代码时写日志文件,是用新建.txt文件去保存日志文件,写起来很麻烦,C#本来提供了一种log文档的使用方式: 1 首先添加Nlog的引用  须要 NLog.dll库支持 2 实例化一个log的类 private NLog.Logger log = NLog.LogManager.GetCurrentClassLogger(); 3 使用时只写上log.bug(str)即可.

联机重做日志文件 (转)

文章转自:http://www.cnblogs.com/kerrycode/archive/2012/08/09/2631035.html 联机日志文件又叫重做日志文件,记录了对数据库修改的信息,包括用户对数据修改和数据库管理员对数据库结构的修改.它主要用于在发生故障的时候和数据库备份文件配合恢复数据库,一般发生故障有2个情况:一个是介质损坏另外一个是用户误操作.每个数据库至少有两个日志文件组,每组至少包含1个或者多个日志成员,这里要多个日志成员的原因是防止日志文件组内某个日志文件损坏后及时提供

控制文件与日志文件

1:控制文件 每个数据库至少拥有一个控制文件,一个数据库可以同时拥有多个控制文件,但是一个控制文件只能属于一个数据库,Oracle创建数据库时系统会自动创建两个或三个控制文件,每个控制文件记录相同的信息. 使用语句SELECT * from v$controlfile;查看控制文件 2:日志文件 1)重做日志文件 记录数据库所有发生过的更改信息(增删改)以及Oracle内部行为(创建数据表.索引等)而引起的数据库变化信息. 技巧:通过对表或者整个表空间设定NOLOGGING属性,使基于表或表空间