proxygen
folly::ImmediateFileWriter Class Reference

#include <ImmediateFileWriter.h>

Inheritance diagram for folly::ImmediateFileWriter:
folly::LogWriter

Public Member Functions

 ImmediateFileWriter (folly::StringPiece path)
 
 ImmediateFileWriter (folly::File &&file)
 
void writeMessage (folly::StringPiece buffer, uint32_t flags=0) override
 
void flush () override
 
bool ttyOutput () const override
 
const folly::FilegetFile () const
 
- Public Member Functions inherited from folly::LogWriter
virtual ~LogWriter ()
 
virtual void writeMessage (std::string &&buffer, uint32_t flags=0)
 

Private Member Functions

 ImmediateFileWriter (ImmediateFileWriter const &)=delete
 
ImmediateFileWriteroperator= (ImmediateFileWriter const &)=delete
 

Private Attributes

folly::File file_
 

Additional Inherited Members

- Public Types inherited from folly::LogWriter
enum  Flags : uint32_t { NO_FLAGS = 0x00, NEVER_DISCARD = 0x01 }
 

Detailed Description

A LogWriter implementation that immediately writes to a file descriptor when it is invoked.

The downside of this class is that logging I/O occurs directly in your normal program threads, so that logging I/O may block or slow down normal processing.

However, one benefit of this class is that log messages are written out immediately, so if your program crashes, all log messages generated before the crash will have already been written, and no messages will be lost.

Definition at line 36 of file ImmediateFileWriter.h.

Constructor & Destructor Documentation

folly::ImmediateFileWriter::ImmediateFileWriter ( folly::StringPiece  path)
explicit

Construct an ImmediateFileWriter that appends to the file at the specified path.

Definition at line 27 of file ImmediateFileWriter.cpp.

References folly::Range< Iter >::str().

Referenced by getFile().

28  : file_{path.str(), O_WRONLY | O_APPEND | O_CREAT} {}
std::string str() const
Definition: Range.h:591
folly::ImmediateFileWriter::ImmediateFileWriter ( folly::File &&  file)
explicit

Construct an ImmediateFileWriter that writes to the specified File object.

Definition at line 30 of file ImmediateFileWriter.cpp.

References folly::gen::move.

31  : file_{std::move(file)} {}
constexpr detail::Map< Move > move
Definition: Base-inl.h:2567
folly::ImmediateFileWriter::ImmediateFileWriter ( ImmediateFileWriter const &  )
privatedelete

Member Function Documentation

void folly::ImmediateFileWriter::flush ( )
overridevirtual

Block until all messages that have already been sent to this LogWriter have been written.

Other threads may still call writeMessage() while flush() is running. writeMessage() calls that did not complete before the flush() call started will not necessarily be processed by the flush call.

Implements folly::LogWriter.

Definition at line 52 of file ImmediateFileWriter.cpp.

52 {}
const folly::File& folly::ImmediateFileWriter::getFile ( ) const
inline

Get the output file.

Definition at line 63 of file ImmediateFileWriter.h.

References file_, ImmediateFileWriter(), and operator=().

63  {
64  return file_;
65  }
ImmediateFileWriter& folly::ImmediateFileWriter::operator= ( ImmediateFileWriter const &  )
privatedelete

Referenced by getFile().

bool folly::ImmediateFileWriter::ttyOutput ( ) const
inlineoverridevirtual

Returns true if the output steam is a tty.

Implements folly::LogWriter.

Definition at line 56 of file ImmediateFileWriter.h.

References folly::File::fd(), and file_.

56  {
57  return isatty(file_.fd());
58  }
int fd() const
Definition: File.h:85
void folly::ImmediateFileWriter::writeMessage ( folly::StringPiece  buffer,
uint32_t  flags = 0 
)
overridevirtual

Write a serialized log message.

The flags parameter is a bitwise-ORed set of Flag values defined above.

Implements folly::LogWriter.

Definition at line 33 of file ImmediateFileWriter.cpp.

References folly::Range< Iter >::data(), folly::errnoStr(), folly::File::fd(), file_, folly::LoggerDB::internalWarning(), folly::Range< Iter >::size(), and folly::writeFull().

35  {
36  // Write the data.
37  // We are doing direct file descriptor writes here, so there is no buffering
38  // of log message data. Each message is immediately written to the output.
39  auto ret = folly::writeFull(file_.fd(), buffer.data(), buffer.size());
40  if (ret < 0) {
41  int errnum = errno;
43  __FILE__,
44  __LINE__,
45  "error writing to log file ",
46  file_.fd(),
47  ": ",
48  errnoStr(errnum));
49  }
50 }
constexpr size_type size() const
Definition: Range.h:431
int fd() const
Definition: File.h:85
constexpr Iter data() const
Definition: Range.h:446
ssize_t writeFull(int fd, const void *buf, size_t count)
Definition: FileUtil.cpp:134
fbstring errnoStr(int err)
Definition: String.cpp:463
static void internalWarning(folly::StringPiece file, int lineNumber, Args &&...args) noexcept
Definition: LoggerDB.h:201

Member Data Documentation

folly::File folly::ImmediateFileWriter::file_
private

Definition at line 71 of file ImmediateFileWriter.h.

Referenced by getFile(), ttyOutput(), and writeMessage().


The documentation for this class was generated from the following files: