Skip to content
This repository was archived by the owner on Jun 30, 2025. It is now read-only.

Commit cb1b4aa

Browse files
committed
add map between severity and overdue minutes
1 parent 6c5c692 commit cb1b4aa

File tree

1 file changed

+35
-4
lines changed

1 file changed

+35
-4
lines changed

src/logging.cc

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
#include <tuple>
4747
#include <type_traits>
4848
#include <utility>
49+
#include <unordered_map>
4950

5051
#include "config.h"
5152
#include "glog/platform.h"
@@ -337,6 +338,16 @@ const char* GetLogSeverityName(LogSeverity severity) {
337338
return LogSeverityNames[severity];
338339
}
339340

341+
LogSeverity FindFilepathLogSeverity(const std::string& filepath) {
342+
for (int i = GLOG_INFO; i < NUM_SEVERITIES; i++) {
343+
if (filepath.find(GetLogSeverityName(static_cast<LogSeverity>(i))) != std::string::npos) {
344+
return static_cast<LogSeverity>(i);
345+
}
346+
}
347+
// assume that the file has the INFO severity
348+
return GLOG_INFO;
349+
}
350+
340351
static bool SendEmailInternal(const char* dest, const char* subject,
341352
const char* body, bool use_logging);
342353

@@ -437,6 +448,9 @@ class LogCleaner {
437448

438449
// Setting overdue to 0 days will delete all logs.
439450
void Enable(const std::chrono::minutes& overdue);
451+
452+
void Enable(std::unordered_map<LogSeverity, std::chrono::minutes>& overdue_per_severity_);
453+
440454
void Disable();
441455

442456
void Run(const std::chrono::system_clock::time_point& current_time,
@@ -460,8 +474,7 @@ class LogCleaner {
460474
const std::chrono::system_clock::time_point& current_time) const;
461475

462476
bool enabled_{false};
463-
std::chrono::minutes overdue_{
464-
std::chrono::duration<int, std::ratio<kSecondsInWeek>>{1}};
477+
std::unordered_map<LogSeverity, std::chrono::minutes> overdue_per_severity_;
465478
std::chrono::system_clock::time_point
466479
next_cleanup_time_; // cycle count at which to clean overdue log
467480
};
@@ -1286,7 +1299,14 @@ LogCleaner::LogCleaner() = default;
12861299

12871300
void LogCleaner::Enable(const std::chrono::minutes& overdue) {
12881301
enabled_ = true;
1289-
overdue_ = overdue;
1302+
for (int i = GLOG_INFO; i < NUM_SEVERITIES; i++) {
1303+
overdue_per_severity_[static_cast<LogSeverity>(i)] = overdue;
1304+
}
1305+
}
1306+
1307+
void LogCleaner::Enable(std::unordered_map<LogSeverity, std::chrono::minutes>& overdue_per_severity) {
1308+
enabled_ = true;
1309+
overdue_per_severity_ = overdue_per_severity;
12901310
}
12911311

12921312
void LogCleaner::Disable() { enabled_ = false; }
@@ -1471,7 +1491,14 @@ bool LogCleaner::IsLogLastModifiedOver(
14711491
const auto last_modified_time =
14721492
std::chrono::system_clock::from_time_t(file_stat.st_mtime);
14731493
const auto diff = current_time - last_modified_time;
1474-
return diff >= overdue_;
1494+
1495+
LogSeverity severity = FindFilepathLogSeverity(filepath);
1496+
auto overdue_it = overdue_per_severity_.find(severity);
1497+
// if there is no overdue for this severity, do not delete it
1498+
if(overdue_it == overdue_per_severity_.end()){
1499+
return false;
1500+
}
1501+
return diff >= overdue_it->second;
14751502
}
14761503

14771504
// If failed to get file stat, don't return true!
@@ -2627,6 +2654,10 @@ void EnableLogCleaner(const std::chrono::minutes& overdue) {
26272654
log_cleaner.Enable(overdue);
26282655
}
26292656

2657+
void EnableLogCleaner(std::unordered_map<LogSeverity, std::chrono::minutes>& overdue_per_severity) {
2658+
log_cleaner.Enable(overdue_per_severity);
2659+
}
2660+
26302661
void DisableLogCleaner() { log_cleaner.Disable(); }
26312662

26322663
LogMessageTime::LogMessageTime() = default;

0 commit comments

Comments
 (0)