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();
+ }
+ }
}
}