namespace PSCMonitoringSoftware
{
internal class LogProvider : BaseViewModel
{
private object logLock = new object();
StringBuilder logStr = new StringBuilder();
public string _statePathh { get; set; }
public string _alarmPath { get; set; }
public string _faultPath { get; set; }
public string _operationPath { get; set; }public LogProvider()
{
string StatePath = System.Environment.CurrentDirectory + "\\Logs\\StateLog";
string AlarmPath = System.Environment.CurrentDirectory + "\\Logs\\AlarmLog";
string FaultPath = System.Environment.CurrentDirectory + "\\Logs\\FaultLog";
string OperationPath = System.Environment.CurrentDirectory + "\\Logs\\OperationLog";
if (!Directory.Exists(StatePath)) //若此文件夹不存在
{
Directory.CreateDirectory(StatePath); //创建此文件夹
}
if (!Directory.Exists(AlarmPath)) //若此文件夹不存在
{
Directory.CreateDirectory(AlarmPath); //创建此文件夹
}
if (!Directory.Exists(FaultPath)) //若此文件夹不存在
{
Directory.CreateDirectory(FaultPath); //创建此文件夹
}
if (!Directory.Exists(OperationPath)) //若此文件夹不存在
{
Directory.CreateDirectory(OperationPath); //创建此文件夹
}
_statePathh = StatePath;
_alarmPath = AlarmPath;
_faultPath = FaultPath;
_operationPath = OperationPath;}
public void WriteLog(string msg, LogType logType)
{
WriteLog(new Log
{
Time = DateTime.Now,
LogType = logType,
Message = msg,
});
}
/// <summary>
/// 写入日志
/// </summary>
/// <param name="log"></param>
private void WriteLog(Log log)
{
lock (logLock)
{
logStr.Append(log.Time + ":"+log.Message.ToString()+"\r\n");
string fileName = string.Empty;//文件名
string fullPath = string.Empty;//整个文件夹路径
switch (log.LogType)
{
case LogType.State:
fileName = DateTime.Now.ToString("yyyyMMdd") + ".log";
fullPath = Path.Combine(_statePathh, fileName);
break;
case LogType.Alarm:
fileName = DateTime.Now.ToString("yyyyMMdd") + ".log";
fullPath = Path.Combine(_alarmPath, fileName);
break;
case LogType.Fault:
fileName = DateTime.Now.ToString("yyyyMMdd") + ".log";
fullPath = Path.Combine(_faultPath, fileName);
break;
case LogType.Operation:
fileName = DateTime.Now.ToString("yyyyMMdd") + ".log";
fullPath = Path.Combine(_operationPath, fileName);
break;
default:
break;
}
File.AppendAllText(fullPath, logStr.ToString());
logStr.Clear();
}
}//删除指定日期文件,保留7天
public void StateDispose()
{
string Days = ConfigurationManager.AppSettings["Days"];
int days = Convert.ToInt32(Days);
string file = DateTime.Now.ToString("yyyyMMdd") + ".log";
string path = Path.Combine(_statePathh, file);
try
{
var now = DateTime.Now;
foreach (var f in Directory.GetFileSystemEntries(_statePathh).Where(f => File.Exists(f)))
{
var t = File.GetCreationTime(f);
var elapsedTicks = now.Ticks - t.Ticks;
var elaspsedSpan = new TimeSpan(elapsedTicks);
if (elaspsedSpan.TotalDays > days)
{
File.Delete(f);
}
}
}
catch (Exception ex)
{}
}
public void DataCleaning(int day,string FilePath)
{
string file = DateTime.Now.ToString("yyyyMMdd") + ".log";
string path = Path.Combine(FilePath, file);
try
{
var now = DateTime.Now;
foreach (var f in Directory.GetFileSystemEntries(FilePath).Where(f => File.Exists(f)))
{
var t = File.GetCreationTime(f);
var elapsedTicks = now.Ticks - t.Ticks;
var elaspsedSpan = new TimeSpan(elapsedTicks);
if (elaspsedSpan.TotalDays > day)
{
File.Delete(f);
}
}
}
catch (Exception ex)
{}
}public void RecordLogs(string DeviceName, string msg, LogType logType)
{
DoorDAL doorDAL = new DoorDAL();
Logging logging = new Logging()
{
OperationTime = DateTime.Now,
DeviceName = DeviceName,
OperationDescription = msg,
LogType = (int)logType
};
doorDAL.InserLoging(logging);
}}
internal class Log
{
public DateTime Time { get; set; }
public string Message { get; set; }
public LogType LogType { get; set; }public string ErrorFile { get; set; }
public string ErrorMethod { get; set; }
public int ErrorLineNum { get; set; }//public override string ToString()
//{
// // 2022-12-31 20:00:00 [INFO] Message
// // 2022-12-31 20:00:00 [ERROR] Message
// // 文件:ErrorFile
// // ErrorMethod[Line: ErrorLineNum]
// if (this.LogType == LogType.LOG)
// {
// return $"{Time.ToString("yyyy-MM-dd HH:mm:ss")} [{LogType.ToString()}] {Message}\r\n";
// }
// else if (this.LogType == LogType.ERROR)
// {
// return $"{Time.ToString("yyyy-MM-dd HH:mm:ss")} [{LogType.ToString()}] {Message}\r\n" +
// $"\t异常文件:{ErrorFile}\r\n" +
// $"\t异常位置:{ErrorMethod} [Line:{ErrorLineNum}]\r\n\r\n";
// }
// return base.ToString();
//}
}
internal enum LogType
{
/// <summary>
/// 状态类记录
/// </summary>
State,/// <summary>
/// 故障类记录
/// </summary>
Alarm,/// <summary>
/// 报警类记录
/// </summary>
Fault,/// <summary>
/// 操作类记录
/// </summary>
Operation
}
}
使用方式:
logProvider.WriteLog("Error........", LogType.Alarm);