/*************************************************************************** * GLog.hpp - Information logger * * ----------------------------------------------------------------------- * * copyright (C) 2010-2012 by Juergen Knoedlseder * * ----------------------------------------------------------------------- * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * * * ***************************************************************************/ /** * @file GLog.hpp * @brief Information logger class definition * @author Juergen Knoedlseder */ #ifndef GLOG_HPP #define GLOG_HPP /* __ Includes ___________________________________________________________ */ #include #include /* __ Forward declarations _______________________________________________ */ /***********************************************************************//** * @class GLog * * @brief Information logger interface defintion. * * This class implements an interface for logging of text messages to the * standard output and/or error streams and into an ASCII log file. It * provides a C++ style interface (allowing to stream messages using code * such as * log << "This is a message"; * and a C style interface that allows making use of C style text formating * using code such as * log("These are %d messages with %d items.", n, m); * The logger interface implements an internal character buffer that is * flushed once a maximum size parameter is exceeded. The buffer limit can * be modified using the max_size() method; by default it is set to 8192 * characters. The logger allows prepending of the current date and the task * name. ***************************************************************************/ class GLog { public: // Constructors and destructors GLog(void); GLog(const std::string& filename, bool clobber = false); GLog(const GLog& log); ~GLog(void); // Operators GLog& operator= (const GLog& log); void operator()(const char *msgFormat, ...); GLog& operator<<(GLog& log); GLog& operator<<(const std::string& str); GLog& operator<<(const char* str); GLog& operator<<(const char& value); GLog& operator<<(const unsigned char& value); GLog& operator<<(const bool& value); GLog& operator<<(const int& value); GLog& operator<<(const unsigned int& value); GLog& operator<<(const double& value); GLog& operator<<(std::ostream& (*fn)(std::ostream&)); // Methods void clear(void); int size(void) const; void open(const std::string& filename, bool clobber = false); void close(void); void flush(bool force = false); void date(bool flag); void cout(bool flag); void cerr(bool flag); void name(const std::string& name); void max_size(int size); void indent(int indent); void header0(const std::string& arg) { header(arg, 0); } void header1(const std::string& arg) { header(arg, 1); } void header2(const std::string& arg) { header(arg, 2); } void header3(const std::string& arg) { header(arg, 3); } bool date(void) const { return m_use_date; } bool cout(void) const { return m_stdout; } bool cerr(void) const { return m_stderr; } std::string name(void) const { return m_name; } int max_size(void) const { return m_max_length; } int indent(void) const { return m_indent; } std::string filename(void) const { return m_filename; } protected: // Protected methods void init_members(void); void copy_members(const GLog& log); void free_members(void); void header(const std::string& arg, int level); std::string strdate(void) const; std::string prefix(void) const; void append(std::string arg); // Protected data members int m_max_length; //!< Maximum buffer length int m_indent; //!< Indentation of text bool m_stdout; //!< Dump in standard output bool m_stderr; //!< Dump in standard error bool m_use_date; //!< Dump date in prefix FILE* m_file; //!< Log file pointer std::string m_filename; //!< Log file name std::string m_name; //!< Name for prefix std::string m_buffer; //!< Output string buffer }; #endif /* GLOG_HPP */