UtiLite
0.3.1
A lite utilities library
|
#include <ULogger.h>
Inherited by UConsoleLogger, and UFileLogger.
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 > |
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()); ...
enum ULogger::Level |
Logger levels, from lowest severity to highest:
kDebug, kInfo, kWarning, kError, kFatal
enum ULogger::Type |
Loggers available:
kTypeNoLog, kTypeConsole, kTypeFile
void ULogger::flush | ( | ) | [static] |
Flush buffered messages.
int ULogger::getTime | ( | std::string & | timeStr | ) | [static] |
Get the time in the format "2008-7-13 12:23:44".
timeStr | string were the time will be copied. |
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.
buffered | true 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()).
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:
level | the 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.
printColored | true to print text with color, otherwise set to false. |
static void ULogger::setPrintEndline | ( | bool | printEndline | ) | [inline, static] |
Print end of line: default true.
printLevel | true to print end of line, otherwise set to false. |
static void ULogger::setPrintLevel | ( | bool | printLevel | ) | [inline, static] |
Print level: default true.
printLevel | true to print level, otherwise set to false. |
static void ULogger::setPrintTime | ( | bool | printTime | ) | [inline, static] |
Print time: default true.
printTime | true 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.
printWhere | true 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.
printWhereFullPath | true 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.
type | the ULogger::Type of the logger. |
fileName | file name used with a file logger type. |
append | if 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] |
const std::string ULogger::kDefaultLogFileName = "./ULog.txt" [static] |
The default log file name.