添加项目文件。
This commit is contained in:
@@ -0,0 +1,135 @@
|
||||
using NLog;
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Timers;
|
||||
|
||||
|
||||
public class Logger
|
||||
{
|
||||
|
||||
|
||||
private static readonly NLog.Logger loginfo = LogManager.GetLogger("loginfo");
|
||||
private static readonly NLog.Logger logerror = LogManager.GetLogger("logerror");
|
||||
private static readonly NLog.Logger logmqtt = LogManager.GetLogger("logmqtt");
|
||||
|
||||
private static readonly NLog.Logger logsInfo = LogManager.GetLogger("logsInfo");
|
||||
private static readonly NLog.Logger logsMEStIME = LogManager.GetLogger("logsMEStIME");
|
||||
private static readonly NLog.Logger logsSql = LogManager.GetLogger("logsSql");
|
||||
private static readonly NLog.Logger logsSysErrorLog = LogManager.GetLogger("logsSysErrorLog");
|
||||
private static readonly NLog.Logger logsSysErrorLogcn = LogManager.GetLogger("logsSysErrorLogcn");
|
||||
private static readonly Timer cleanupTimer;
|
||||
private const int MAX_DAYS = 7;
|
||||
private const string LOG_BASE_PATH = "Log";
|
||||
|
||||
static Logger()
|
||||
{
|
||||
try
|
||||
{
|
||||
// 创建一个每天执行一次的定时器
|
||||
cleanupTimer = new Timer(24 * 60 * 60 * 1000); // 24小时
|
||||
cleanupTimer.Elapsed += CleanupOldLogs;
|
||||
cleanupTimer.Start();
|
||||
|
||||
// 启动时执行一次清理
|
||||
CleanupOldLogs(null, null);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
WriteError("Failed to initialize logger cleanup timer", ex);
|
||||
}
|
||||
}
|
||||
|
||||
public static void WriteInfo(string info)
|
||||
{
|
||||
if (loginfo.IsInfoEnabled)
|
||||
{
|
||||
loginfo.Info(info);
|
||||
}
|
||||
}
|
||||
|
||||
public static void WriteMqtt(string info)
|
||||
{
|
||||
if (logmqtt.IsInfoEnabled)
|
||||
{
|
||||
logmqtt.Info(info);
|
||||
}
|
||||
}
|
||||
|
||||
public static void WriteError(string error)
|
||||
{
|
||||
if (logerror.IsErrorEnabled)
|
||||
{
|
||||
logerror.Error(error);
|
||||
}
|
||||
}
|
||||
|
||||
public static void WriteError(string info, Exception ex)
|
||||
{
|
||||
if (logerror.IsErrorEnabled)
|
||||
{
|
||||
logerror.Error(info, ex);
|
||||
}
|
||||
}
|
||||
|
||||
private static void CleanupOldLogs(object sender, ElapsedEventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!Directory.Exists(LOG_BASE_PATH))
|
||||
return;
|
||||
|
||||
string[] logTypes = { "LogError", "LogInfo", "LogMqtt" };
|
||||
DateTime cutoffDate = DateTime.Now.AddDays(-MAX_DAYS);
|
||||
|
||||
foreach (string logType in logTypes)
|
||||
{
|
||||
string logTypeDir = Path.Combine(LOG_BASE_PATH, logType);
|
||||
if (!Directory.Exists(logTypeDir))
|
||||
continue;
|
||||
|
||||
// 获取所有日期文件夹
|
||||
string[] dateDirs = Directory.GetDirectories(logTypeDir);
|
||||
foreach (string dateDir in dateDirs)
|
||||
{
|
||||
string dirName = Path.GetFileName(dateDir);
|
||||
if (DateTime.TryParseExact(dirName, "yyyyMMdd", null,
|
||||
System.Globalization.DateTimeStyles.None, out DateTime dirDate))
|
||||
{
|
||||
if (dirDate < cutoffDate)
|
||||
{
|
||||
try
|
||||
{
|
||||
Directory.Delete(dateDir, true);
|
||||
WriteInfo($"Deleted old log directory: {dateDir}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
WriteError($"Failed to delete log directory: {dateDir}", ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
WriteError("Error during log cleanup", ex);
|
||||
}
|
||||
}
|
||||
|
||||
// 提供手动清理方法
|
||||
public static void ForceCleanupOldLogs()
|
||||
{
|
||||
CleanupOldLogs(null, null);
|
||||
}
|
||||
|
||||
// 在应用程序退出时调用此方法
|
||||
public static void Shutdown()
|
||||
{
|
||||
if (cleanupTimer != null)
|
||||
{
|
||||
cleanupTimer.Stop();
|
||||
cleanupTimer.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user