diff --git a/Oqtane.Client/Resources/Modules/Admin/Logs/Index.resx b/Oqtane.Client/Resources/Modules/Admin/Logs/Index.resx index f464d6fe..27b3c4c7 100644 --- a/Oqtane.Client/Resources/Modules/Admin/Logs/Index.resx +++ b/Oqtane.Client/Resources/Modules/Admin/Logs/Index.resx @@ -210,7 +210,7 @@ Settings Saved Successfully - + Clear Logs diff --git a/Oqtane.Client/Services/LogService.cs b/Oqtane.Client/Services/LogService.cs index 9369f90d..26c37038 100644 --- a/Oqtane.Client/Services/LogService.cs +++ b/Oqtane.Client/Services/LogService.cs @@ -37,7 +37,7 @@ namespace Oqtane.Services public async Task ClearLogsAsync(int siteId) { - await DeleteAsync($"{Apiurl}?siteid={siteId}&includeErrors=true"); + await DeleteAsync($"{Apiurl}?siteid={siteId}"); } public async Task Log(int? pageId, int? moduleId, int? userId, string category, string feature, LogFunction function, LogLevel level, Exception exception, string message, params object[] args) diff --git a/Oqtane.Server/Controllers/LogController.cs b/Oqtane.Server/Controllers/LogController.cs index 490c7563..c35bf6bf 100644 --- a/Oqtane.Server/Controllers/LogController.cs +++ b/Oqtane.Server/Controllers/LogController.cs @@ -79,11 +79,11 @@ namespace Oqtane.Controllers [HttpDelete] [Authorize(Roles = RoleNames.Admin)] - public void Delete(string siteId, bool includeErrors) + public void Delete(string siteId) { if (int.TryParse(siteId, out int parsedSiteId) && parsedSiteId == _alias.SiteId) { - _logs.DeleteLogs(parsedSiteId, 0, includeErrors); + _logs.ClearLogs(parsedSiteId); } else { diff --git a/Oqtane.Server/Repository/Interfaces/ILogRepository.cs b/Oqtane.Server/Repository/Interfaces/ILogRepository.cs index d30da106..623e3a2d 100644 --- a/Oqtane.Server/Repository/Interfaces/ILogRepository.cs +++ b/Oqtane.Server/Repository/Interfaces/ILogRepository.cs @@ -8,6 +8,7 @@ namespace Oqtane.Repository IEnumerable GetLogs(int siteId, string level, string function, int rows); Log GetLog(int logId); void AddLog(Log log); - int DeleteLogs(int siteId, int age, bool includeErrors = false); + int DeleteLogs(int siteId, int age); + void ClearLogs(int siteId); } } diff --git a/Oqtane.Server/Repository/LogRepository.cs b/Oqtane.Server/Repository/LogRepository.cs index 6c767e43..81d5813f 100644 --- a/Oqtane.Server/Repository/LogRepository.cs +++ b/Oqtane.Server/Repository/LogRepository.cs @@ -53,23 +53,37 @@ namespace Oqtane.Repository db.SaveChanges(); } - public int DeleteLogs(int siteId, int age, bool includeErrors = false) + public int DeleteLogs(int siteId, int age) { using var db = _dbContextFactory.CreateDbContext(); // delete logs in batches of 100 records var count = 0; var purgedate = DateTime.UtcNow.AddDays(-age); - var logs = db.Log.Where(item => item.SiteId == siteId && (includeErrors || item.Level != "Error") && item.LogDate < purgedate) + var logs = db.Log.Where(item => item.SiteId == siteId && item.Level != "Error" && item.LogDate < purgedate) .OrderBy(item => item.LogDate).Take(100).ToList(); while (logs.Count > 0) { count += logs.Count; db.Log.RemoveRange(logs); db.SaveChanges(); - logs = db.Log.Where(item => item.SiteId == siteId && (includeErrors || item.Level != "Error") && item.LogDate < purgedate) + logs = db.Log.Where(item => item.SiteId == siteId && item.Level != "Error" && item.LogDate < purgedate) .OrderBy(item => item.LogDate).Take(100).ToList(); } return count; } + + public void ClearLogs(int siteId) + { + using var db = _dbContextFactory.CreateDbContext(); + var getLogsForDelete = () => db.Log.Where(item => item.SiteId == siteId).Take(100).ToList(); + // delete logs in batches of 100 records + var logs = getLogsForDelete(); + while (logs.Count > 0) + { + db.Log.RemoveRange(logs); + db.SaveChanges(); + logs = getLogsForDelete(); + } + } } }