using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace LogClass
{
public class LOG
{
static public StringBuilder _log = new StringBuilder();
static FileIO fio;
static public int min = 0;
static public int max = 10;
//
static LOG()
{
fio = new FileIO();
fio.OpenWriteFile("log.txt");
}
static public void error(object str)
{
log("Erorr:" + str, 10);
}
//static object syn = new object();
///
/// log写入
///
///
static public void log(object str)
{
log(str, 0);
}
static public void log(string str)
{
log(str, 0);
}
///
/// log等级定制
///
///
///
public static void log(object p, int level)
{
log(p.ToString(), level);
}
static public void log(string str, int level)
{
if(level < fio.LogLevel)
{
return;
}
if (str == null)
{
str = "null";
}
fio.WriteLine(DateTime.Now.ToLocalTime() + "->" + str + "\r\n");
}
///
/// 修改Log的限制等级0日志最多,10最少
///
///
public static void ChangeLogLevel(int Loglevel)
{
fio.LogLevel = Loglevel;
}
public static void LogSurPlusMemory()
{
PerformanceCounter ramCounter = new PerformanceCounter("Memory", "Available MBytes");
var ramAvailable = ramCounter.NextValue();
string ramAvaiableStr = string.Format("{0} MB", ramAvailable);
log($"剩余物理内存:{ramAvaiableStr}");
}
}
public class FileIO
{
private FileStream fsr;
private FileStream fsw;
private StreamWriter sw;
private StreamReader sr;
private string LogFloderPath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "Log\\";
private double LogFileSize =128 * Math.Pow(1024, 3);
public int LogLevel = 0;
// 创建用于读取文件行的文件流和StreamWriter对象
public void OpenReadFile(string file)
{
if (!File.Exists(file))
File.Create(file).Close();
fsr = new FileStream(file, FileMode.OpenOrCreate, FileAccess.Read, FileShare.ReadWrite);
sr = new StreamReader(fsr);
}
public void Clear()
{
CloseWriteFile();
}
// 关闭读文件流
public void CloseReadFile()
{
if (fsr != null)
fsr.Close();
}
// 创建用于向文件中追加行的文件流和StreamWriter对象
public void OpenWriteFile(string file)
{
int i = 1;
while(true)
{
if (!Directory.Exists(LogFloderPath))//如果不存在就创建file文件夹
{
Directory.CreateDirectory(LogFloderPath);
}
if (!File.Exists(LogFloderPath + file)) // 如果文件不存在,先创建这个文件
File.Create(LogFloderPath + file).Close();
// 以追加模式打开这个文件
fsw = new FileStream(LogFloderPath + file, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
if (fsw.Length > LogFileSize)
{
file = "log"+ i + ".txt";
i++ ;
continue;
}
break;
}
// 根据创建的FileStream对象来创建StreamWriter对象
sw = new StreamWriter(fsw);
}
// 关闭写文件流
public void CloseWriteFile()
{
if (fsw != null)
fsw.Close();
}
// 从文件中读取一行
public string ReadLine()
{
if (sr.EndOfStream) // 如果文件流指针已经指向文件尾部,返回null
return null;
return sr.ReadLine();
}
// 向文件中追加一行字符串
public void WriteLine(string s)
{
if(fsw.Length > LogFileSize)
{
OpenWriteFile("log.txt");
}
lock (sw)
{
sw.WriteLine(s);
sw.Flush(); // 刷新写入缓冲区,使这一行对于读文件流可见
}
}
// 用于判断文件流指针是否位于文件尾部
public bool IsEof()
{
return sr.EndOfStream;
}
}
}