-/*] Copyright (c) 2009-2010, Charles McGarvey [**************************
+/*] Copyright (c) 2009-2011, Charles McGarvey [*****************************
**] All rights reserved.
*
-* vi:ts=4 sw=4 tw=75
-*
* Distributable under the terms and conditions of the 2-clause BSD license;
* see the file COPYING for a complete text of the license.
*
-**************************************************************************/
+*****************************************************************************/
#ifndef _MOOF_LOG_HH_
#define _MOOF_LOG_HH_
-/**
- * \file log.hh
- * Functions related to logging the process.
- * The logging functions are log_error(), log_warning(), and log_info(),
- * listed from most critical to least critical.
- */
-
#include <cstdlib> // exit
#include <iostream>
#include <string>
+/**
+ * \file log.hh
+ * Functions related to logging the process. The logging functions are
+ * log_error(), log_warning(), and log_info(), listed from most critical to
+ * least critical.
+ */
+
namespace moof {
+// forward declarations
class script;
-
/**
* A class for handling a log priority. There are two ways to log
* messages: by treating a log object as a function whose parameters are
*/
enum level
{
- none = 0, ///< Disable all logging.
- error = 1, ///< Log only errors.
- warning = 2, ///< Log warnings and errors.
- info = 3, ///< Log everything.
- debug = 4, ///< Log absolutely everything.
+ none = 0, ///< Disable all logging.
+ error = 1, ///< Log only errors.
+ warning = 2, ///< Log warnings and errors.
+ info = 3, ///< Log everything.
+ debug = 4, ///< Log absolutely everything.
};
-
/**
* Set the lowest-priority log message that will be outputted to the
* log. Any logging with a lower priority will be ignored.
*/
static enum level level();
-
/**
* Import log functions to a script.
* \param The script.
*/
static void import(script& script);
-
/**
* Construct a log with a certain priority and prefix string.
* \param level The log level.
*/
log(enum level level);
-
/**
* Output this to end a line. This is equivalent to std::endl except
* this will also reset terminal format attributes.
{
} endl;
-
template <class A>
void operator () (const A& a)
{
template <class A, class B, class C, class D, class E>
void operator () (const A& a,
- const B& b,
- const C& c,
- const D& d,
- const E& e)
+ const B& b,
+ const C& c,
+ const D& d,
+ const E& e)
{
- *this << a << " "
- << b << " "
- << c << " "
- << d << " "
- << e << endl;
+ *this << a << " " << b << " " << c << " " << d << " " << e <<
+ endl;
}
-
private:
template <class T> friend std::ostream& operator << (log&, const T&);
static enum level global_level_;
- enum level level_;
- std::string prefix_;
+ enum level level_;
+ std::string prefix_;
};
-
extern std::ostream& log;
extern std::ostream& null_log;
-extern class log log_error;
-extern class log log_warning;
-extern class log log_info;
-extern class log log_debug;
+extern class log& log_error;
+extern class log& log_warning;
+extern class log& log_info;
+extern class log& log_debug;
template <class T>