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; } } }