c# 程序检测日志输出的类
public class LogWrite
{
public LogWrite()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
#region Constant
//单个日志文件大小
private const long FILESIZE = * * ;
//日志文件数
private const int LOGFILENUM = ;
//日志类型
private const short DEBUG = ;
private const short INFO = ;
private const short WARNING = ;
private const short ERROR = ;
//日志级别
private const short LOGLEVEL = DEBUG;
#endregion
#region Members
//日志文件路径
private string m_LogDir = System.Windows.Forms.Application.StartupPath + "\\module0\\Log";
private string m_filePath = System.Windows.Forms.Application.StartupPath + "\\module0\\Log\\Log.txt";//工作日志文件
private static LogWrite m_Log = null;
private Object objLock = new Object();
private string destClass = string.Empty;
#endregion
#region Properties
/// <summary>
/// 记录日志的类名
/// </summary>
public string DestClass
{
get { return destClass; }
set { destClass = value; }
}
#endregion
#region Ctor
#endregion
#region Public Methods
/// <summary>
/// 创建日志类实例
/// </summary>
/// <returns></returns>
public static LogWrite CreateInstance()
{
if (m_Log == null)
{
m_Log = new LogWrite();
}
return m_Log;
}
/// <summary>
/// 写信息日志
/// </summary>
/// <param name="content"></param>
public void Info(string content)
{
if (LOGLEVEL <= )
{
lock (objLock)
{
WriteLog(content, LogWrite.INFO);
}
}
}
/// <summary>
/// 写调试日志
/// </summary>
/// <param name="content"></param>
public void Debug(string content)
{
if (LOGLEVEL <= )
{
lock (objLock)
{
WriteLog(content, LogWrite.DEBUG);
}
}
}
/// <summary>
/// 写警告日志
/// </summary>
/// <param name="content"></param>
public void Warning(string content)
{
if (LOGLEVEL <= )
{
lock (objLock)
{
WriteLog(content, LogWrite.WARNING);
}
}
}
/// <summary>
/// 写错误日志
/// </summary>
/// <param name="content"></param>
public void Error(string content)
{
if (LOGLEVEL <= )
{
lock (objLock)
{
WriteLog(content, LogWrite.ERROR);
}
}
}
#endregion
#region Private Methods
/// <summary>
/// 写日志
/// </summary>
/// <param name="content"></param>
/// <param name="type"></param>
private void WriteLog(string content, short type)
{
if (content == null || content.Equals(string.Empty))
{
return;
}
try
{
if (!File.Exists(m_filePath))
{
CreateWorkLogFile();
}
if (LogFileIsTooLarge(m_filePath))
{
ProcessLogFile();
}
string strType = "";
switch (type)
{
case DEBUG:
strType = " [DEBUG] ";
break;
case INFO:
strType = " [INFO] ";
break;
case WARNING:
strType = " [WARNING] ";
break;
case ERROR:
strType = " [ERROR] ";
break;
default:
strType = " [INFO] ";
break;
}
string strContent = string.Format("{0}\t{1}\t[{2}]\t{3}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), strType, DestClass, content);
StreamWriter sWriter = new StreamWriter(m_filePath, true, System.Text.Encoding.Default);
sWriter.WriteLine(strContent);
sWriter.Flush();
sWriter.Close();
sWriter = null;
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message);
}
}
/// <summary>
/// 创建工作日志文件
/// </summary>
private void CreateWorkLogFile()
{
if (!Directory.Exists(m_LogDir))
{
Directory.CreateDirectory(m_LogDir);
}
FileStream fStream = new FileStream(m_filePath, FileMode.CreateNew);
fStream.Flush();
fStream.Close();
fStream = null;
}
/// <summary>
/// 判断日志文件是否超过预定义最大值
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
private bool LogFileIsTooLarge(string fileName)
{
FileInfo fi = new FileInfo(fileName);
if (fi.Length >= FILESIZE)
{
return true;
}
else
{
return false;
}
}
/// <summary>
/// 处理日志文件(工作日志文件超过最大值)
/// </summary>
private void ProcessLogFile()
{
try
{
DirectoryInfo dirInfo = new DirectoryInfo(m_LogDir);
FileInfo[] vFileInfo = dirInfo.GetFiles("*.txt");
if (vFileInfo != null && vFileInfo.Length > LOGFILENUM)
{
FileInfo oldFile = vFileInfo[];
foreach (FileInfo fi in vFileInfo)
{
if (DateTime.Compare(fi.LastWriteTime, oldFile.LastWriteTime) < )
{
oldFile = fi;
}
}
File.Delete(oldFile.FullName);
}
File.Copy(m_filePath, m_LogDir + "\\" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".txt");
File.Delete(m_filePath);
CreateWorkLogFile();
}
catch
{
}
}
#endregion
}
类的路径需要修改下,就OK 了
private string m_LogDir = System.Windows.Forms.Application.StartupPath + "\\module0\\Log";
private string m_filePath = System.Windows.Forms.Application.StartupPath + "\\module0\\Log\\Log.txt";//工作日志文件
用的时候 只要实例就行了
private LogWrite m_Log = null; //构造函数里
m_Log = module0.WritLog.LogWrite.CreateInstance();
m_Log.set_DestClass
//输出日志在地方
m_Log.Info(System.DateTime.get_Now().ToString() + " :... ");
c# 程序检测日志输出的类的更多相关文章
- 关于在Eclipse上运行Hadoop程序的日志输出问题
在安装由Eclipse-Hadoop-Plugin的Eclipse中, 可以直接运行Hadoop的MapReduce程序, 但是如果什么都不配置的话你发现Eclipse控制台没有任何日志输出, 这个问 ...
- iOS项目之使用开关控制日志输出的功能
最近一直在做sdk的项目,用户提出了一个需求,需要屏蔽sdk内部的日志输出.由于sdk内部的日志是为了调试,如果屏蔽了肯定不方便,所以研究了一下日志输出开关的功能. 在这里介绍两种实现方案:一种方案是 ...
- Log4j将不同Package的日志输出到不同的文件的方法
随着项目规模的越来越大,会不断的引入新的模块,不同的模块都会打印自己的日志,最后就造成日志根本没法查看,比如我自己的项目中,就存在以下这些日志: 接收外界消息的日志.对外发送消息的日志: 后台常驻线程 ...
- Log4j将不同Package的日志输出到不同的文件
转自:http://www.crazyant.net/1931.html 随着项目规模的越来越大,会不断的引入新的模块,不同的模块都会打印自己的日志,最后就造成日志根本没法查看,比如我自己的项目中,就 ...
- Qt编写调试日志输出类带网络转发(开源)
用qt开发商业程序已经九年了,陆陆续续开发过至少几十个程序,除了一些算不算项目的小工具外,大部分的程序都需要有个日志的输出功能,希望可以将程序的运行状态存储到文本文件或者数据库或者做其他处理等,qt对 ...
- Java基础-继承-编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数 loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个 类都有构造方法和输出相关数据的方法。最后,写一个测试类来测试这些类的功 能。
#29.编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight.小车类Car是Vehicle的子类,其中包含的属性有载人数 loader.卡车类T ...
- 使用Monitor调试Unity3D Android程序日志输出(非DDMS和ADB)
使用Monitor调试Unity3D Android程序日志输出(非DDMS和ADB) http://www.cnblogs.com/mrkelly/p/4015245.html 以往调试Androi ...
- springboot+logback日志输出企业实践(上)
目录 1.引言 2.logback简介 3. springboot默认日志框架-logback 3.1 springboot示例工程搭建 3.2 日志输出与基本配置 3.2.1 日志默认输出 3.2. ...
- Java自定义日志输出文件
Java自定义日志输出文件 日志的打印,在程序中是必不可少的,如果需要将不同的日志打印到不同的地方,则需要定义不同的Appender,然后定义每一个Appender的日志级别.打印形式和日志的输出路径 ...
随机推荐
- [工具开发] keepalived使用nagios监控脚本
最近在做开发和办公环境的高可用,采用的是keepalived:keepalived基于Linux内核支持的LVS,既能实现高可用,又能实现负载均衡,非常实用. keepalived监控服务状态时可以用 ...
- 升级NC6.3
2014-04-23 江苏建工&用友公司会谈提纲 1,合同规定江苏建工用友NC在实施成功之后三年免服务费(2010年增补了资金管理,如果以2010年作为软件最终实施完成,那么2010-2013 ...
- eclipse 代码自动提示
从Window -> preferences -> Java -> Editor -> Content assist -> Auto-Activation下,我们可以在& ...
- python __init__.py用途
转自http://www.cnpythoner.com/post/2.html Python中的Module是比较重要的概念.常见的情况是,事先写好一个.py文 件,在另一个文件中需要import时, ...
- Window中常见的dos命令
1.如何实行操作dos命令:如果是Windows电脑,从开始--->所有程序---->附件--->命令提示 这样就可以开始命令提示符了 2关于一些dos命令: 2.1 盘符切换:盘符 ...
- perl脚本基础总结
1. 单引号字符串中的\n不会被当做换行符处理. 如:'\'\\' --> '\ . 2. 双引号 字符串联 "Hello"."World" ...
- lintcode-【简单题】合并区间
题目: 给出若干闭合区间,合并所有重叠的部分. 样例: 给出的区间列表 => 合并后的区间列表: [ [ [1, 3], [1, 6], [2, 6], => [8, 10], [8, 1 ...
- PCI Express(四) - The transaction layer
原文出处:http://www.fpga4fun.com/PCI-Express4.html 感觉没什么好翻译的,都比较简单,主要讲了TLP的帧结构 In the transaction layer, ...
- (1)as_view() (2)在urls.py里面出现的pk是怎么回事 (3)RetrieveAPIView表示什么
下面的代码都是我从github上下载的源码中摘取的django: https://github.com/django/django 下载命令: git clone https://github.com ...
- 第一零五天上课 PHP TP框架下分页
控制器代码(TestController.class.php) <?php namespace Home\Controller; use Home\Controller\EmptyControl ...