From: Sage Weil Date: Thu, 10 Mar 2016 14:50:07 +0000 (-0500) Subject: log: do not repeat errors to stderr X-Git-Tag: v10.1.0~154^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d9ac0474b864afda58a44b9012cca4bbc6aaf509;p=ceph.git 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 --- 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;