// Copyright 2017 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef _BSDIFF_LOGGING_H_
#define _BSDIFF_LOGGING_H_
#include <string.h>
#include <iostream>
#include <sstream>
// Simple error logging macro to avoid dependencies in other base libraries.
#define LOG(severity) LogMessage(__FILE__, __LINE__, #severity).stream()
// A variant of LOG that also logs the current errno value.
#define PLOG(severity) LogMessage(__FILE__, __LINE__, #severity, errno).stream()
// A temporarily scoped object used by LOG & PLOG.
class LogMessage {
public:
LogMessage(const char* file, unsigned int line, const char* severity);
LogMessage(const char* file,
unsigned int line,
const char* severity,
int error);
~LogMessage();
// Returns the stream associated with the message, the LogMessage performs
// output when it goes out of scope.
std::ostream& stream() { return stream_; }
private:
std::ostringstream stream_;
int error_; // The saved errno value.
};
#endif // _BSDIFF_LOGGING_H_