Files
KJD/AllBase/LogSave.cs
T
2026-08-03 16:22:50 +08:00

254 lines
7.8 KiB
C#

/*
* 日志记录
* 肖俊
* 2015-3-13
*/
using NaiBa.Util;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading;
using System.Windows.Forms;
namespace AllBase
{
public class LogSave
{
/// <summary>
/// 消息日志
/// </summary>
public static Dictionary<string, List<string>> Messages = new Dictionary<string, List<string>>();
/// <summary>
/// 日志队列
/// </summary>
private static ConcurrentList<string> Logs = new ConcurrentList<string>();
/// <summary>
/// 准备写入文件
/// </summary>
public static List<string> ImageTemp = new List<string>();
/// <summary>
/// 初始化
/// </summary>
public LogSave()
{
FileBase.DirectoryCreate(Application.StartupPath + "\\log\\");
FileBase.DirectoryCreate(Application.StartupPath + "\\temp\\");
FileBase.DirectoryCreate(Application.StartupPath + "\\temp\\content\\");
FileBase.DirectoryCreate(Application.StartupPath + "\\temp\\desc\\");
string[] l = Directory.GetFiles(Application.StartupPath + "\\log\\");
for (int i = 0; i < l.Length; i++)
{
string name = Path.GetFileName(l[i]);
string date = BaseRegex.GetMatchRegexString(ref name, @"([\d]{4}-[\d]{1,2}-[\d]{1,2})");
DateTime d;
if (DateTime.TryParse(date, out d))
{
if (d<DateTime.Now.AddDays(-7))
{
FileBase.Delete(l[i]);
}
}
}
}
public static void AddFile(string message)
{
string patch = "log\\" + DateTime.Now.ToString("yyyy-MM-dd") + ".log";
try
{
File.AppendAllText(patch, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\r\n" + message + "\r\n");
}
catch
{
}
}
public static void ClearFile()
{
FileBase.DirectoryCreate(Application.StartupPath + "\\log\\");
string[] l = Directory.GetFiles(Application.StartupPath + "\\log\\");
for (int i = 0; i < l.Length; i++)
{
string name = Path.GetFileName(l[i]);
string date = BaseRegex.GetMatchRegexString(ref name, @"([\d]{4}-[\d]{1,2}-[\d]{1,2})");
DateTime d;
if (DateTime.TryParse(date, out d))
{
if (d < DateTime.Now.AddDays(-7))
{
FileBase.Delete(l[i]);
}
}
}
}
/// <summary>
/// 服务
/// </summary>
public void Get()
{
string temp;
while (true)
{
if (Logs.Count == 0 && ImageTemp.Count==0)
{
Thread.Sleep(10000);
continue;
}
StringBuilder s = new StringBuilder();
while (ImageTemp.Count>0)
{
string it = ImageTemp[0];
ImageTemp.RemoveAt(0);
if (string.IsNullOrEmpty(it))
continue;
s.AppendLine(it);
}
string image = s.ToString();
if (image.Length > 0)
FileBase.AppendAllText("image/" + BaseClass.ShopName+".tjm", image, Encoding.Default);
temp = "";
while (Logs.Count>0)
{
try
{
temp += Logs[0] + "\r\n";
Logs.RemoveAt(0);
}
catch
{
}
}
if(string.IsNullOrEmpty(temp))
continue;
string patch = "log\\" + DateTime.Now.ToString("yyyy-MM-dd") + ".log";
try
{
File.AppendAllText(patch, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") +"\r\n"+ temp);
}
catch (Exception e)
{
if(e.Message.Contains("空间"))
return;
Thread.Sleep(500);//重试一次
try
{
File.AppendAllText(patch, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\r\n" + temp);
}
catch (Exception)
{
BaseClass.ViewCode += "写入IIS日志:" + patch + " 发生错误:"+e.Message+"\r\n";
}
}
Thread.Sleep(120*1000);
}
}
/// <summary>
/// 添加日志
/// </summary>
/// <param name="message">日志</param>
public static void Add(string message)
{
BaseClass.ViewCode += message + "\r\n";
if (Logs.Count > 5000)
{
//BaseClass.ViewCode += "日志队列超长,请检查日志处理\r\n";
Logs.Clear();
return;
}
Logs.Add(message);
}
/// <summary>
/// 添加日志
/// </summary>
/// <param name="Name">名称</param>
/// <param name="message">日志</param>
public static void Add(string Name,string message)
{
if (string.IsNullOrEmpty(Name))
{
Logs.Add(message);
return;
}
if (!Messages.ContainsKey(Name))
{
try
{
Messages.Add(Name, new List<string>());
}
catch
{
}
}
try
{
Logs.Add(message);
Messages[Name].Add(message);
}
catch
{
}
}
/// <summary>
/// 添加到显示
/// </summary>
/// <param name="message">日志</param>
public static void AddView(string message)
{
BaseClass.ViewCode += message + "\r\n";
}
/// <summary>
/// 设置最大值
/// </summary>
/// <param name="name">名称</param>
/// <param name="max">最大值</param>
public static void SetProccessMax(string name, int max)
{
if (!BaseClass.ProcessList.ContainsKey(name))
{
try
{
BaseClass.ProcessList.Add(name,new ProcessBase());
}
catch
{
}
}
BaseClass.ProcessList[name].Max = max;
}
/// <summary>
/// 设置当前值
/// </summary>
/// <param name="name">名称</param>
/// <param name="value">当前值</param>
public static void SetProccessValue(string name, int value)
{
if (!BaseClass.ProcessList.ContainsKey(name))
{
try
{
BaseClass.ProcessList.Add(name, new ProcessBase());
}
catch
{
}
}
BaseClass.ProcessList[name].Value = value;
}
/// <summary>
/// 设置为最大值,完成
/// </summary>
/// <param name="name"></param>
public static void SetProccessFinish(string name)
{
BaseClass.ProcessList[name].Value = BaseClass.ProcessList[name].Max;
}
}
}