From d9ac0474b864afda58a44b9012cca4bbc6aaf509 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 10 Mar 2016 09:50:07 -0500 Subject: [PATCH] log: do not repeat errors to stderr If we get an error writing to the log, log it only once to stderr. This avoids generating, say, 72 GB of ENOSPC errors in teuthology.log when /var/log fills up. Fixes: #14616 Signed-off-by: Sage Weil --- src/log/Log.cc | 11 ++++++++--- src/log/Log.h | 2 ++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/log/Log.cc b/src/log/Log.cc index 7d34bd7ef6d..bf46e20c7cf 100644 --- a/src/log/Log.cc +++ b/src/log/Log.cc @@ -53,6 +53,7 @@ Log::Log(SubsystemMap *s) m_fd(-1), m_uid(0), m_gid(0), + m_fd_last_error(0), m_syslog_log(-2), m_syslog_crash(-2), m_stderr_log(1), m_stderr_crash(-1), m_graylog_log(-3), m_graylog_crash(-3), @@ -337,9 +338,13 @@ void Log::_flush(EntryQueue *t, EntryQueue *requeue, bool crash) if (do_fd) { buf[buflen] = '\n'; int r = safe_write(m_fd, buf, buflen+1); - if (r < 0) - cerr << "problem writing to " << m_log_file << ": " << cpp_strerror(r) - << std::endl; + if (r != m_fd_last_error) { + if (r < 0) + cerr << "problem writing to " << m_log_file + << ": " << cpp_strerror(r) + << std::endl; + m_fd_last_error = r; + } } if (need_dynamic) delete[] buf; diff --git a/src/log/Log.h b/src/log/Log.h index 07df6e39fc5..687cb9b7b19 100644 --- a/src/log/Log.h +++ b/src/log/Log.h @@ -39,6 +39,8 @@ class Log : private Thread uid_t m_uid; gid_t m_gid; + int m_fd_last_error; ///< last error we say writing to fd (if any) + int m_syslog_log, m_syslog_crash; int m_stderr_log, m_stderr_crash; int m_graylog_log, m_graylog_crash; -- 2.47.3