/usr/include/glibmm-utils-1.0/glibmm-utils/log-stream.h is in libglibmm-utils-dev 0.4.1-0ubuntu2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 | /* -*- Mode: C++; indent-tabs-mode:nil; c-basic-offset: 4-*- */
/*Copyright (c) 2005-2006 Dodji Seketeli
* 2007 Marko Anastasov
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library 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
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public License
* along with this library; if not, write to the
* Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#ifndef __GLIBMM_UTILS_LOG_STREAM_H__
#define __GLIBMM_UTILS_LOG_STREAM_H__
#include <string>
#include <tr1/memory>
#include <glibmm/ustring.h>
#ifndef GLIBMM_DEFAULT_DOMAIN
#define GLIBMM_DEFAULT_DOMAIN __FILE__
#endif
#ifndef GLIBMM_GENERAL_DOMAIN
#define GLIBMM_GENERAL_DOMAIN "general-domain"
#endif
using std::string ;
namespace Glib {
namespace Util {
/// \brief The log stream class.
/// It features logging to cout, cerr and files.
/// It also features log domains and log levels.
class LogStream
{
friend LogStream& timestamp (LogStream &);
friend LogStream& flush (LogStream &) ;
friend LogStream& endl (LogStream &) ;
struct Priv ;
std::tr1::shared_ptr<Priv> m_priv ;
//forbid copy/assignation
LogStream (LogStream const&) ;
LogStream& operator= (LogStream const&) ;
protected:
public:
enum StreamType {
FILE_STREAM = 1,
COUT_STREAM = 1 >> 1,
CERR_STREAM = 1 >> 2,
RFU0,//reserved for future usage
RFU1,
RFU2
};
enum LogLevel {
LOG_LEVEL_NORMAL=0,
LOG_LEVEL_VERBOSE
};
/// \brief set the type of all the log streams that will be instanciated
///(either cout, cerr, or log file). By default, the type of stream is
/// set to COUT_STREAM. All the logs are sent to stdout.
/// \param a_type the type of the log stream
static void set_stream_type (enum StreamType a_type) ;
/// \brief gets the type of the instances of LogStream
/// \return the stream type as set by LogStream::set_stream_type().
static enum StreamType get_stream_type () ;
/// in the case where the stream type is set to FILE_STREAM,
/// this methods sets the path of the file to log into. By default,
/// the log file is ./log.txt
/// \param a_file_path the log file path.
/// \param a_len the length of the file_path. If <0, it means that a_file_path
/// is a zero terminated string.
static void set_stream_file_path (const char* a_file_path, long a_len=-1) ;
/// \brief gets the log file path, in case the stream type is set to
/// FILE_STREAM
/// \return the path to the log file.
static const char* get_stream_file_path () ;
/// \brief sets the log level filter.
/// if the filter is set to LOG_LEVEL_NORMAL, only the log streams that
/// have a log level set to LOG_LEVEL_NORMAL will actually log data.
/// If the filter is set to LOG_LEVEL_VERBOSE, streams set to
/// LOG_LEVEL_NORMAL *and* streams set to LOG_LEVEL_VERBOSE will be
/// logging data.
///
/// \param a_level the level of verbosity you want your log streams to have.
static void set_log_level_filter (enum LogLevel a_level) ;
/// \brief sets a filter on the log domain
/// only streams that have the same domain as the one set here will
/// be logging data.
/// \param a_domain the domain name.
/// \param a_len the length of the domain name.
/// If <0, it means that <tt>a_domain</tt> is a zero terminated string.
static void set_log_domain_filter (const char* a_domain, long a_len=-1) ;
/// \brief activate/de-activate the logging.
/// \param a_activate true to activate the logging, false to deactivate.
static void activate (bool a_activate) ;
/// \brief tests wether the logging is activated or not.
/// \return true if the logging is activated, false otherwise.
static bool is_active () ;
/// \brief gets the log stream instanciated by the system by default.
/// the options of this log stream are the global options set before
/// the first call to this method.
/// \return the log stream instanciated by default.
static LogStream& default_log_stream () ;
/// \brief default constructor of a LogStream.
/// \param a_level the log level of the stream. This stream
/// will log data if its log level is inferior or equal to
/// the log level filter defined by LogStream::set_log_level_filter().
/// \param a_default_domain the log domain. A stream will log data if its
/// its log level is <= to the log level filter, *and* if its domain equals
/// the domain filter.
LogStream (enum LogLevel a_level=LOG_LEVEL_NORMAL,
const string &a_default_domain=GLIBMM_GENERAL_DOMAIN) ;
/// \brief destructor of the log stream class
virtual ~LogStream () ;
/// \brief enable or disable logging for a domain
/// \param a_domain the domain to enable logging for
/// \param a_do_enable when set to true, enables the logging for domain
/// <tt>a_domain</tt>, disable it otherwise.
void enable_domain (const string &a_domain,
bool a_do_enable=true) ;
/// \return <tt>true</tt> if is logging is enabled
/// for domain <tt>a_domain</tt>
bool is_domain_enabled (const string &a_domain) ;
/// \brief writes a text string to the stream
/// \param a_buf the buffer that contains the text string.
/// \param a_buflen the length of the buffer. If <0, a_buf is
/// considered as a zero terminated string.
/// \param a_domain the domain the string has to be logged against.
LogStream& write (const char *a_buf,
long a_buflen =-1,
const string &a_domain=GLIBMM_GENERAL_DOMAIN) ;
/// \brief log a message to the stream
/// \param a_msg the message to log
/// \param a_domain the domain to log against
LogStream& write (const Glib::ustring &a_msg,
const string &a_domain=GLIBMM_GENERAL_DOMAIN) ;
LogStream& write (int a_msg,
const string &a_domain=GLIBMM_GENERAL_DOMAIN) ;
LogStream& write (guint a_msg,
const string &a_domain=GLIBMM_GENERAL_DOMAIN) ;
LogStream& write (double a_msg,
const string &a_domain=GLIBMM_GENERAL_DOMAIN) ;
LogStream& write (char a_msg,
const string &a_domain=GLIBMM_GENERAL_DOMAIN) ;
/// set the domain in against which all the coming
/// messages will be logged.
/// This is to be used in association with the << operators where
/// we cannot specify the domain to log against, unlike LogStream::write() .
/// \param a_domain the domain to log against.
void push_domain (const string &a_domain) ;
/// pops the last domain that has been pushed using LogStream::push_domain.
void pop_domain () ;
/// \brief log zero teriminated strings
/// \param a_string the string to log
LogStream& operator<< (const Glib::ustring &a_string) ;
/// \brief log an integer
/// \param an_int the integer to log
LogStream& operator<< (int an_int) ;
/// \brief log a guint
/// \param an_int the guint to log
LogStream& operator<< (guint an_int) ;
/// \brief log a double
/// \param a_double the double to log
LogStream& operator<< (double a_double) ;
/// \brief log a character
/// \param a_char the char to log
LogStream& operator<< (char a_char) ;
/// \brief log a stream manipulator
/// \param a_manipulator the LogStream manipulator to log
LogStream& operator<< (LogStream& (*a_manipulator) (LogStream&)) ;
friend LogStream& level_normal (LogStream &a_stream) ;
friend LogStream& level_verbose (LogStream &a_stream) ;
};//end class LogStream
/// \brief logs a timestamp. Basically the
/// the current date. You use it like:
/// Glib::Util::LogStream out ; out << Glib::Util::timestamp ;
LogStream& timestamp (LogStream&);
/// \brief flushes the stream
/// Use it like: Glib::Util::LogStream out ;
/// out << "Hello" << Glib::Util::flush ;
LogStream& flush (LogStream &) ;
/// \brief log a '\\n' and flushes the stream
/// Use it like: Glib::Util::LogStream out ;
/// out << "hello"<< Glib::Util::endl ;
LogStream& endl (LogStream &) ;
/// \brief sets the log level to normal
/// Use it like Glib::Util::LogStream out ;
/// out << Glib::Util::level_normal << "blabla" ;
LogStream& level_normal (LogStream &) ;
/// \brief sets the log level to verbose
/// Use it lik: Glib::Util::LogStream out ;
/// out << Glib::Util::level_verbose << "bla bla bla" ;
LogStream& level_verbose (LogStream &) ;
} // namespace Util
} // namespace Glib
#endif //__GLIBMM_UTILS_LOG_STREAM_H__
|