using YLErp.Enums;
namespace YLErp.Modules.CalculationLogModule
{
internal class CalculationLogger
{
private readonly static object _lock = new object();
///
/// 所有日志集合
///
private static List Options { get; set; } = new List();
///
/// 配置
///
private static CalculationLoggerConfig _config = new CalculationLoggerConfig();
///
/// 配置记录日志的场景
///
/// 日志场景
public static void Setup(CalculationLoggerConfig config)
{
_config.TotalCountMaxLimit = config.TotalCountMaxLimit;
_config.ScenariosOfCalcLog = config.ScenariosOfCalcLog;
}
///
/// 返回配置
///
///
public static CalculationLoggerConfig GetConfig()
{
return _config;
}
///
/// 返回所有的日志
///
///
public static List GetAllLogs()
{
return Options.ToList();
}
///
/// 查询Log
///
/// log 编号
///
public static CalculationLog GetLog(string logNum)
{
return Options.FirstOrDefault(b=>b.LogNum==logNum);
}
///
/// 按场景添加日志
///
/// 日志对象
/// 日志场景
public static void AddLogWithScenario(CalculationLog log, CalcScenarioEnum scenarioEnum)
{
if (_config.ScenariosOfCalcLog.Contains(scenarioEnum))
{
log.Scenario = scenarioEnum;
AddLogWithLimit(log);
}
}
///
/// 清除所有的日志
///
public static void ClearAll()
{
Options.Clear();
}
///
/// 有限制的添加日志
///
/// 日志对象
private static void AddLogWithLimit(CalculationLog log)
{
var count = GetCurrentTotalCount();
if (count >= _config.TotalCountMaxLimit)
{
// 如果总数量大于限制的数量,先删除头部1000条
// TotalCountMaxLimit可能会有改动,所以需要(count - _config.TotalCountMaxLimit)
RemoveLogs(0, count - _config.TotalCountMaxLimit + 1000);
}
AddLog(log);
}
///
/// 添加一条log
///
///
private static void AddLog(CalculationLog log)
{
log.LogNum=Guid.NewGuid().ToString();
lock (_lock)
{
Options.Add(log);
}
}
///
/// 删除1000条logs
///
private static void RemoveThousandLogs()
{
RemoveLogs(0, 1000);
}
///
/// 删除logs
///
/// 起始位置
/// 删除数量
private static void RemoveLogs(int index, int count)
{
Options.RemoveRange(index, count - 1);
}
///
/// 获取当前Log总数量
///
///
private static int GetCurrentTotalCount()
{
return Options.Count;
}
}
}