Files
1258/IOT.Services/Logger.cs
T

135 lines
4.0 KiB
C#
Raw Normal View History

2026-08-04 18:36:40 +08:00
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();
}
}
}