summaryrefslogtreecommitdiff
path: root/src/mongo/logger/rotatable_file_writer.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/logger/rotatable_file_writer.h')
-rw-r--r--src/mongo/logger/rotatable_file_writer.h156
1 files changed, 80 insertions, 76 deletions
diff --git a/src/mongo/logger/rotatable_file_writer.h b/src/mongo/logger/rotatable_file_writer.h
index c6ad0c364d7..b20fb818a9f 100644
--- a/src/mongo/logger/rotatable_file_writer.h
+++ b/src/mongo/logger/rotatable_file_writer.h
@@ -36,93 +36,97 @@
namespace mongo {
namespace logger {
+/**
+ * A synchronized file output stream writer, with support for file rotation.
+ *
+ * To enforce proper locking, instances of RotatableFileWriter may only be manipulated by
+ * instantiating a RotatableFileWriter::Use guard object, which exposes the relevant
+ * manipulation methods for the stream. For any instance of RotatableFileWriter, at most one
+ * fully constructed instance of RotatableFileWriter::Use exists at a time, providing mutual
+ * exclusion.
+ *
+ * Behavior is undefined if two instances of RotatableFileWriter should simultaneously have the
+ * same value for their fileName.
+ */
+class RotatableFileWriter {
+ MONGO_DISALLOW_COPYING(RotatableFileWriter);
+
+public:
/**
- * A synchronized file output stream writer, with support for file rotation.
- *
- * To enforce proper locking, instances of RotatableFileWriter may only be manipulated by
- * instantiating a RotatableFileWriter::Use guard object, which exposes the relevant
- * manipulation methods for the stream. For any instance of RotatableFileWriter, at most one
- * fully constructed instance of RotatableFileWriter::Use exists at a time, providing mutual
- * exclusion.
- *
- * Behavior is undefined if two instances of RotatableFileWriter should simultaneously have the
- * same value for their fileName.
+ * Guard class representing synchronous use of an instance of RotatableFileWriter.
*/
- class RotatableFileWriter {
- MONGO_DISALLOW_COPYING(RotatableFileWriter);
+ class Use {
+ MONGO_DISALLOW_COPYING(Use);
+
public:
/**
- * Guard class representing synchronous use of an instance of RotatableFileWriter.
+ * Constructs a Use object for "writer", and lock "writer".
+ */
+ explicit Use(RotatableFileWriter* writer);
+
+ /**
+ * Sets the name of the target file to which stream() writes to "name".
+ *
+ * May be called repeatedly.
+ *
+ * If this method does not return Status::OK(), it is not safe to call rotate() or
+ * stream().
+ *
+ * Set "append" to true to open "name" in append mode. Otherwise, it is truncated.
+ */
+ Status setFileName(const std::string& name, bool append);
+
+ /**
+ * Rotates the currently opened file into "renameTarget", and open a new file
+ * with the name previously set via setFileName().
+ *
+ * renameFiles - true we rename the log file, false we expect it was renamed externally
+ *
+ * Returns Status::OK() on success. If the rename fails, returns
+ * ErrorCodes::FileRenameFailed, and the stream continues to write to the unrotated
+ * file. If the rename succeeds but the subsequent file open fails, returns
+ * ErrorCodes::FileNotOpen, and the stream continues to target the original file, though
+ * under its new name.
*/
- class Use {
- MONGO_DISALLOW_COPYING(Use);
- public:
- /**
- * Constructs a Use object for "writer", and lock "writer".
- */
- explicit Use(RotatableFileWriter* writer);
-
- /**
- * Sets the name of the target file to which stream() writes to "name".
- *
- * May be called repeatedly.
- *
- * If this method does not return Status::OK(), it is not safe to call rotate() or
- * stream().
- *
- * Set "append" to true to open "name" in append mode. Otherwise, it is truncated.
- */
- Status setFileName(const std::string& name, bool append);
-
- /**
- * Rotates the currently opened file into "renameTarget", and open a new file
- * with the name previously set via setFileName().
- *
- * renameFiles - true we rename the log file, false we expect it was renamed externally
- *
- * Returns Status::OK() on success. If the rename fails, returns
- * ErrorCodes::FileRenameFailed, and the stream continues to write to the unrotated
- * file. If the rename succeeds but the subsequent file open fails, returns
- * ErrorCodes::FileNotOpen, and the stream continues to target the original file, though
- * under its new name.
- */
- Status rotate(bool renameFile, const std::string& renameTarget);
-
- /**
- * Returns the status of the stream.
- *
- * One of Status::OK(), ErrorCodes::FileNotOpen and ErrorCodes::FileStreamFailed.
- */
- Status status();
-
- /**
- * Returns a reference to the std::ostream() through which users may write to the file.
- */
- std::ostream& stream() { return *_writer->_stream; }
-
- private:
- /**
- * Helper that opens the file named by setFileName(), in the mode specified by "append".
- *
- * Returns Status::OK() on success and ErrorCodes::FileNotOpen on failure.
- */
- Status _openFileStream(bool append);
-
- RotatableFileWriter* _writer;
- stdx::unique_lock<stdx::mutex> _lock;
- };
+ Status rotate(bool renameFile, const std::string& renameTarget);
/**
- * Constructs an instance of RotatableFileWriter.
+ * Returns the status of the stream.
+ *
+ * One of Status::OK(), ErrorCodes::FileNotOpen and ErrorCodes::FileStreamFailed.
*/
- RotatableFileWriter();
+ Status status();
+
+ /**
+ * Returns a reference to the std::ostream() through which users may write to the file.
+ */
+ std::ostream& stream() {
+ return *_writer->_stream;
+ }
private:
- friend class RotatableFileWriter::Use;
- stdx::mutex _mutex;
- std::string _fileName;
- std::unique_ptr<std::ostream> _stream;
+ /**
+ * Helper that opens the file named by setFileName(), in the mode specified by "append".
+ *
+ * Returns Status::OK() on success and ErrorCodes::FileNotOpen on failure.
+ */
+ Status _openFileStream(bool append);
+
+ RotatableFileWriter* _writer;
+ stdx::unique_lock<stdx::mutex> _lock;
};
+ /**
+ * Constructs an instance of RotatableFileWriter.
+ */
+ RotatableFileWriter();
+
+private:
+ friend class RotatableFileWriter::Use;
+ stdx::mutex _mutex;
+ std::string _fileName;
+ std::unique_ptr<std::ostream> _stream;
+};
+
} // namespace logger
} // namespace mongo