LogCleaner: avoid scanning logs too frequently

This commit is contained in:
chien-hsing.wu 2021-12-31 02:29:16 +08:00 committed by Sergiu Deitsch
parent b0174b3dda
commit 18836106d1
2 changed files with 27 additions and 3 deletions

View File

@ -64,6 +64,10 @@ TEST(CleanImmediatelyWithAbsolutePrefix, logging) {
LOG(INFO) << "cleanup test";
}
for (unsigned i = 0; i < 10; ++i) {
LOG(ERROR) << "cleanup test";
}
google::DisableLogCleaner();
}

View File

@ -154,6 +154,10 @@ GLOG_DEFINE_int32(logbuflevel, 0,
" ...)");
GLOG_DEFINE_int32(logbufsecs, 30,
"Buffer log messages for at most this many seconds");
GLOG_DEFINE_int32(logcleansecs, 60 * 5, // every 5 minutes
"Clean overdue logs every this many seconds");
GLOG_DEFINE_int32(logemaillevel, 999,
"Email log messages logged at this level or higher"
" (0 means email all; 3 means email FATAL only;"
@ -484,9 +488,12 @@ class LogCleaner {
void Enable(unsigned int overdue_days);
void Disable();
// update next_cleanup_time_
void UpdateCleanUpTime();
void Run(bool base_filename_selected,
const string& base_filename,
const string& filename_extension) const;
const string& filename_extension);
bool enabled() const { return enabled_; }
@ -503,6 +510,7 @@ class LogCleaner {
bool enabled_;
unsigned int overdue_days_;
int64 next_cleanup_time_; // cycle count at which to clean overdue log
};
LogCleaner log_cleaner;
@ -1303,7 +1311,7 @@ void LogFileObject::Write(bool force_flush,
}
}
LogCleaner::LogCleaner() : enabled_(false), overdue_days_(7) {}
LogCleaner::LogCleaner() : enabled_(false), overdue_days_(7), next_cleanup_time_(0) {}
void LogCleaner::Enable(unsigned int overdue_days) {
enabled_ = true;
@ -1314,12 +1322,24 @@ void LogCleaner::Disable() {
enabled_ = false;
}
void LogCleaner::UpdateCleanUpTime() {
const int64 next = (FLAGS_logcleansecs
* 1000000); // in usec
next_cleanup_time_ = CycleClock_Now() + UsecToCycles(next);
}
void LogCleaner::Run(bool base_filename_selected,
const string& base_filename,
const string& filename_extension) const {
const string& filename_extension) {
assert(enabled_);
assert(!base_filename_selected || !base_filename.empty());
// avoid scanning logs too frequently
if (CycleClock_Now() < next_cleanup_time_) {
return;
}
UpdateCleanUpTime();
vector<string> dirs;
if (!base_filename_selected) {