c#和java超强日志类LogTool.doc_第1页
c#和java超强日志类LogTool.doc_第2页
c#和java超强日志类LogTool.doc_第3页
c#和java超强日志类LogTool.doc_第4页
c#和java超强日志类LogTool.doc_第5页
免费预览已结束,剩余3页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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 msgs; /日志文件保存的路径 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); format = yyyyMMdd.log; break; case LogType.Monthly: TimeSign = new DateTime(now.Year, now.Month, 1); TimeSign = TimeSign.AddMonths(1); format = yyyyMM.log; break; case LogType.Annually: TimeSign = new DateTime(now.Year, 1, 1); TimeSign = TimeSign.AddYears(1); format = yyyy.log; break; return now.ToString(format); /写入日志文本到文件的方法 private void FileWrite(Msg msg) try if (writer = null) FileOpen(); else /判断文件到期标志,如果当前文件到期则关闭当前文件创建新的日志文件 if (DateTime.Now = TimeSign) FileClose(); FileOpen(); writer.Write(msg.Datetime); writer.Write(t); writer.Write(msg.Type); writer.Write(t); writer.WriteLine(msg.Text); writer.Flush(); catch (Exception e) Console.Out.Write(e); /打开文件准备写入 private void FileOpen() writer = new StreamWriter(path + GetFilename(), true, Encoding.UTF8); /关闭打开的日志文件 private void FileClose() if (writer != null) writer.Flush(); writer.Close(); writer.Dispose(); writer = null; / / 写入新日志,根据指定的日志对象Msg / / 日志内容对象 public void Write(Msg msg) if (msg != null) lock (msgs) msgs.Enqueue(msg); / / 写入新日志,根据指定的日志内容和信息类型,采用当前时间为日志时间写入新日志 / / 日志内容 / 信息类型 public void Write(string text, MsgType type) Write(new Msg(text, type); / / 写入新日志,根据指定的日志时间、日志内容和信息类型写入新日志 / / 日志时间 / 日志内容 / 信息类型 public void Write(DateTime dt, string text, MsgType type) Write(new Msg(dt, text, type); / / 写入新日志,根据指定的异常类和信息类型写入新日志 / / 异常对象 / 信息类型 public void Write(Exception e, MsgType type) Write(new Msg(e.Message, type); #region IDisposable 成员 / / 销毁日志对象 / public void Dispose() state = false; #endregion Java 日志类package org;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter;import java.util.Calendar;import java.util.Date;/使用LogTool.getInstance().log(日志内容);添加日志public class LogTool private static final LogTool logtool=new LogTool(); private static PrintWriter logPrint; private static String logFile = ; public static LogTool getInstance() return logtool; /* * 得到log文件名 */ private String getLogFile() String date = ; Calendar cd = Calendar.getInstance(); int y = cd.get(Calendar.YEAR); int m = cd.get(Calendar.MONTH) + 1; int d = cd.get(Calendar.DAY_OF_MONTH); date = ./log/ +y + -; if(m 10) date += 0; date += m + -; if(d 10) date += 0; date += d + .log; return date; /* * 配置log属性,如果没有新建log文件 */ private void newLog() logFile = getLogFile(); try logPrint = new PrintWriter(new FileWriter(logFile, true), true); catch(IOException e) (new File(./log).mkdir(); try logPrint = new PrintWriter(new FileWriter(logFile, true), true); catch(IOException ex) System.err.println(无法打开日志文件: + logFile); logPrint = new PrintWriter(System.err); /* * 检查日期如果改变新建log文件 */ private void checkDate() if(logFile = null | logFile.trim().equals() | !logFile.equals(getLogFile() newLog(); /* * 将文本信息写入日志文件,缺省为userdir/log

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论