using NX_ModelClassLibrary.CustomEnum;
using NX_ModelClassLibrary.LogCorrelationModel;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace NX_LogClassLibrary
{
public static class LogHelper
{
private readonly static object thLock = new object();
#region 记录日志为文本文档形式
///
/// 记录日志类
///
/// 日志内容
/// 日志类型(Run:程序运行日志; Err:程序错误日志; DbErr:数据库异常相关日志; OPCRun:OPC运行日志; SocketRun:Socket运行日志; SocErr:Socket异常日志。)
public static void WriteLog(string Txt, LogTypeEnum logType)
{
lock (thLock)
{
//获取日志存放位置,年份不同,存放文件夹不同。
string strDir = Environment.CurrentDirectory + "\\NX_CleanMac_Log\\" + DateTime.Now.ToString("yyyy") + "\\";
//获取时间,年月日。
string fileDate = DateTime.Now.ToString("yyyy-MM-dd");
//获取时间,年月。
string fileDate1 = DateTime.Now.ToString("yyyy-MM");
//每一年的不同月份日志放在不同的文件夹,同一月份不同类型的日志放于同一个文件夹。
string strDir1 = strDir + fileDate1 + "\\";
//每一年的相同月份不同日期的日志放在不同的文件夹
string strDir2 = strDir1 + fileDate + "\\";
//不同的日志名称,日志文件不同
string filePath = strDir2 + fileDate + "_" + logType + ".log";
string DateString = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
string Str = "发生时间:" + DateString + "|" + Txt + "\r\n";
WriteFile(strDir2, filePath, Str);
}
}
///
/// 日志文件打印类
///
/// 日志文件存放的文件夹
/// 日志文件存放路径
/// 日志内容
private static void WriteFile(string strDir, string filePath, string txt)
{
FileStream fs = null;
StreamWriter sw = null;
try
{
if (!Directory.Exists(strDir))//如果日志文件存放的文件夹不存在,就新建一个文件夹。
{
Directory.CreateDirectory(strDir);
}
if (File.Exists(filePath))//日志文件存放路径存在,向日志文件追加记录。
{
fs = new FileStream(filePath, FileMode.Append);
}
else//日志文件存放路径不存在,创建日志文件。
{
fs = new FileStream(filePath, FileMode.Create);
}
sw = new StreamWriter(fs);
//开始写入
sw.Write(txt);
//清空缓冲区
sw.Flush();
//关闭流
sw.Close();
fs.Close();
}
catch (Exception)
{
;
}
finally
{
if (sw != null)
sw.Close();
if (fs != null)
fs.Close();
}
}
#endregion
#region 读日志
///
/// 生成文件信息
///
///
///
///
private static Tuple BuildLogFileName(DateTime date, LogTypeEnum logType)
{
string strDir = Environment.CurrentDirectory + "\\NX_CleanMac_Log\\" + date.ToString("yyyy") + "\\";
//获取时间,年月日。
string fileDate = date.ToString("yyyy-MM-dd");
//获取时间,年月。
string fileDate1 = date.ToString("yyyy-MM");
//每一年的不同月份日志放在不同的文件夹,同一月份不同类型的日志放于同一个文件夹。
string strDir1 = strDir + fileDate1 + "\\";
//每一年的相同月份不同日期的日志放在不同的文件夹
string strDir2 = strDir1 + fileDate + "\\";
//不同的日志名称,日志文件不同
string filePath = strDir2 + fileDate + "_" + logType + ".log";
return new Tuple(strDir2, filePath);
}
public static IEnumerable ReadLog(DateTime begindate, DateTime endDate, LogTypeEnum logType)
{
List logs = new List();
List strlogs = ReadLogFile(begindate, endDate, logType);
foreach (string strLog in strlogs)
{
LogSearchMd log = LogSearchMd.Deserialize(strLog);
logs.Add(log);
}
return logs;
}
///
/// 读取log文件
///
///
///
///
public static string[] ReadLogFile(DateTime date, LogTypeEnum logType)
{
string filename = BuildLogFileName(date, logType).Item2;
if (!File.Exists(filename))
{
return new string[] { };
}
return File.ReadAllLines(filename);
}
///
/// 读取log文件
///
///
///
///
public static List ReadLogFile(DateTime begindate, DateTime endDate, LogTypeEnum logType)
{
DateTime _date = begindate.Date;
DateTime _endDate = endDate.Date;
List logs = new List();
while (_date <= _endDate)
{
string[] _logs = ReadLogFile(_date, logType);
logs.AddRange(_logs);
_date = _date.AddDays(1);
}
return logs;
}
#endregion
}
}