UtiLite  0.3.1
A lite utilities library
Public Types | Static Public Member Functions | Static Public Attributes | Friends
ULogger Class Reference

#include <ULogger.h>

Inherited by UConsoleLogger, and UFileLogger.

List of all members.

Public Types

enum  Type
enum  Level

Static Public Member Functions

static void setType (Type type, const std::string &fileName=kDefaultLogFileName, bool append=true)
static void setPrintTime (bool printTime)
static void setPrintLevel (bool printLevel)
static void setPrintEndline (bool printEndline)
static void setPrintColored (bool printColored)
static void setPrintWhere (bool printWhere)
static void setPrintWhereFullPath (bool printWhereFullPath)
static void setBuffered (bool buffered)
static void setLevel (ULogger::Level level)
static void setExitLevel (ULogger::Level exitLevel)
static void setEventLevel (ULogger::Level eventSentLevel)
static void reset ()
static void flush ()
static void write (const char *msg,...)
static int getTime (std::string &timeStr)

Static Public Attributes

static const std::string kDefaultLogFileName = "./ULog.txt"

Friends

class UDestroyer< ULogger >

Detailed Description

This class is used to log messages with time on a console, in a file and/or with an event. At the start of the application, call ULogger::setType() with the type of the logger you want (see ULogger::Type, the type of the output can be changed at the run-time.). To use it, simply call the convenient macros UDEBUG(), UINFO(), UWARN(), UERROR(), UFATAL() depending of the severity of the message. You can disable some messages by setting the logger level ULogger::setLevel() to severity you want, defined by ULogger::Level. A fatal message will make the application to exit, printing the message on console (whatever the logger type) and posting a ULogEvent (synchronously... see UEventsManager::post()) before exiting.

The display of the logged messages can be modified:

When using a file logger (kTypeLogger), it can be useful in some application to buffer messages before writing them to hard drive (avoiding hard drive latencies). You can set ULogger::setBuffered() to true to do that. When the buffered messages will be written to file on appllciation exit (ULogger destructor) or when ULogger::flush() is called.

If you want the application to exit on a lower severity level than kFatal, you can set ULogger::setExitLevel() to any ULogger::Type you want.

Example:

 #include <utilite/ULogger.h>
 int main(int argc, char * argv[])
 {
    // Set the logger type. The choices are kTypeConsole,
    // kTypeFile or kTypeNoLog (nothing is logged).
    ULogger::setType(ULogger::kTypeConsole);

    // Set the logger severity level (kDebug, kInfo, kWarning, kError, kFatal).
    // All log entries under the severity level are not logged. Here,
    // only debug messages are not logged.
    ULogger::setLevel(ULogger::kInfo);

    // Use a predefined Macro to easy logging. It can be
    // called anywhere in the application as the logger is
    // a Singleton.
    UDEBUG("This message won't be logged because the "
           "severity level of the logger is set to kInfo.");

    UINFO("This message is logged.");

    UWARN("A warning message...");

    UERROR("An error message with code %d.", 42);

    return 0;
 }

Output:

 [ INFO] (2010-09-25 18:08:20) main.cpp:18::main() This message is logged.
 [ WARN] (2010-09-25 18:08:20) main.cpp:20::main() A warning message...
 [ERROR] (2010-09-25 18:08:20) main.cpp:22::main() An error message with code 42.

Another useful form of the ULogger is to use it with the UTimer class. Here an example:

 #include <utilite/ULogger.h>
 #include <utilite/UTimer.h>
 ...
 UTimer timer; // automatically starts
 // do some works for part A
 UINFO("Time for part A = %f s", timer.ticks());
 // do some works for part B
 UINFO("Time for part B = %f s", timer.ticks());
 // do some works for part C
 UINFO("Time for part C = %f s", timer.ticks());
 ...
See also:
setType()
setLevel()
UDEBUG(), UINFO(), UWARN(), UERROR(), UFATAL()

Member Enumeration Documentation

Logger levels, from lowest severity to highest:

 kDebug, kInfo, kWarning, kError, kFatal

Loggers available:

 kTypeNoLog, kTypeConsole, kTypeFile

Member Function Documentation

void ULogger::flush ( ) [static]

Flush buffered messages.

See also:
setBuffered()
int ULogger::getTime ( std::string &  timeStr) [static]

Get the time in the format "2008-7-13 12:23:44".

Parameters:
timeStrstring were the time will be copied.
Returns:
the number of characters written, or 0 if an error occurred.
void ULogger::reset ( ) [static]

Reset to default parameters.

void ULogger::setBuffered ( bool  buffered) [static]

Set is the logger buffers messages, default false. When true, the messages are buffered until the application is closed or ULogger::flush() is called.

See also:
ULogger::flush()
Parameters:
bufferedtrue to buffer messages, otherwise set to false.
static void ULogger::setEventLevel ( ULogger::Level  eventSentLevel) [inline, static]

An ULogEvent is sent on each message logged at the specified level. Note : On message with level >= exitLevel, the event is sent synchronously (see UEventsManager::post()).

See also:
ULogEvent
setExitLevel()
static void ULogger::setExitLevel ( ULogger::Level  exitLevel) [inline, static]

Make application to exit when a log with level is written (useful for debugging). The message is printed to console (whatever the logger type) and an ULogEvent is sent (synchronously... see UEventsManager::post()) before exiting.

Note : A kFatal level will always exit whatever the level specified here.

static void ULogger::setLevel ( ULogger::Level  level) [inline, static]

Set logger level: default kInfo. All messages over the severity set are printed, other are ignored. The severity is from the lowest to highest:

  • kDebug
  • kInfo
  • kWarning
  • kError
  • kFatal
    Parameters:
    levelthe minimum level of the messages printed.
static void ULogger::setPrintColored ( bool  printColored) [inline, static]

Print text with color: default true. Dark green for Debug, white for Info, yellow for Warning, red for Error and Fatal.

Parameters:
printColoredtrue to print text with color, otherwise set to false.
static void ULogger::setPrintEndline ( bool  printEndline) [inline, static]

Print end of line: default true.

Parameters:
printLeveltrue to print end of line, otherwise set to false.
static void ULogger::setPrintLevel ( bool  printLevel) [inline, static]

Print level: default true.

Parameters:
printLeveltrue to print level, otherwise set to false.
static void ULogger::setPrintTime ( bool  printTime) [inline, static]

Print time: default true.

Parameters:
printTimetrue to print time, otherwise set to false.
static void ULogger::setPrintWhere ( bool  printWhere) [inline, static]

Print where is this message in source code: default true.

Parameters:
printWheretrue to print where, otherwise set to false.
static void ULogger::setPrintWhereFullPath ( bool  printWhereFullPath) [inline, static]

Print the full path: default true. ULogger::setPrintWhere() must be true to have path printed.

Parameters:
printWhereFullPathtrue to print the full path, otherwise set to false.
void ULogger::setType ( Type  type,
const std::string &  fileName = kDefaultLogFileName,
bool  append = true 
) [static]

Set the type of the logger. When using kTypeFile, the parameter "fileName" would be changed (default is "./ULog.txt"), and optionally "append" if we want the logger to append messages to file or to overwrite the file.

Parameters:
typethe ULogger::Type of the logger.
fileNamefile name used with a file logger type.
appendif true, the file isn't overwritten, otherwise it is.

TODO : Can it be useful to have 2 or more types at the same time ? Print in console and file at the same time.

void ULogger::write ( const char *  msg,
  ... 
) [static]

Write a message directly to logger without level handling.

Parameters:
msgthe message to write.
...the variable arguments
Deprecated:
use UDEBUG(), UINFO(), UWARN(), UERROR() or UFATAL()

Member Data Documentation

const std::string ULogger::kDefaultLogFileName = "./ULog.txt" [static]

The default log file name.


The documentation for this class was generated from the following files:
 All Classes Files Functions Variables Enumerations Friends Defines