c#和java超强日志类LogTool
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
c#和java超强日志类LogTool C# 日志类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Threading;
namespace LogTool
{
///
/// 日志类
/// 当调用Write方法时不会造成线程阻塞,而是立即完成方法调用,因此调用线程不用等待日志写入文件
之后才返回。
///
public class Log : IDisposable
{
//日志对象的缓存队列
private static Queue
//日志文件保存的路径
private static string path;
//日志写入线程的控制标记
private static bool state;
//日志记录的类型
private static LogType type;
//日志文件生命周期的时间标记
private static DateTime TimeSign;
//日志文件写入流对象
private static StreamWriter writer;
///
/// 创建日志对象的新实例,采用默认当前程序位置作为日志路径和默认的每日日志文件类型记录
日志
///
public Log()
: this(".\\", LogType.current)
{
}
///
/// 创建日志对象的新实例,采用默认当前程序位置作为日志路径并指定日志类型
///
/// 日志文件创建方式的枚举
public Log(LogType t)
: this(".\\", t)
{
}
///
/// 创建日志对象的新实例,根据指定的日志文件路径和指定的日志文件创建类型
///
/// 日志文件保存路径
/// 日志文件创建方式的枚举
public Log(string p, LogType t)
{
if (msgs == null)
{
state = true;
path = p;
type = t;
msgs = new Queue
Thread thread = new Thread(work);
thread.Start();
}
}
//日志文件写入线程执行的方法
private void work()
{
while (true)
{
//判断队列中是否存在待写入的日志
if (msgs.Count > 0)
{
Msg msg = null;
lock (msgs)
{
msg = msgs.Dequeue();
}
if (msg != null)
{
FileWrite(msg);
}
}
else
{
//判断是否已经发出终止日志并关闭的消息if (state)
{
Thread.Sleep(1);
}
else
{
FileClose();
}
}
}
}
//根据日志类型获取日志文件名,并同时创建文件到期的时间标记//通过判断文件的到期时间标记将决定是否创建新文件。
private string GetFilename()
{
DateTime now = DateTime.Now;
string format = "";
switch (type)
{
case LogType.current:
TimeSign = new DateTime(now.Year, now.Month, now.Day); TimeSign = TimeSign.AddDays(1);
format = "yyyyMMddHHmmss'.log'";
break;
case LogType.Daily:
TimeSign = new DateTime(now.Year, now.Month, now.Day); TimeSign = TimeSign.AddDays(1);
format = "yyyyMMdd'.log'";
break;
case LogType.Weekly:
TimeSign = new DateTime(now.Year, now.Month, now.Day); TimeSign = TimeSign.AddDays(7);