#include <ULogger.h>
Public Types | |
enum | Level { kDebug, kInfo, kWarning, kError, kFatal } |
enum | Type { kTypeNoLog, kTypeConsole, kTypeFile } |
Static Public Member Functions | |
static ULogger::Level | eventLevel () |
static ULogger::Level | exitLevel () |
static void | flush () |
static int | getTime (std::string &timeStr) |
static bool | isBuffered () |
static bool | isPrintColored () |
static bool | isPrintEndLine () |
static bool | isPrintLevel () |
static bool | isPrintTime () |
static bool | isPrintWhere () |
static bool | isPrintWhereFullPath () |
static ULogger::Level | level () |
static void | reset () |
static void | setBuffered (bool buffered) |
static void | setEventLevel (ULogger::Level eventSentLevel) |
static void | setExitLevel (ULogger::Level exitLevel) |
static void | setLevel (ULogger::Level level) |
static void | setPrintColored (bool printColored) |
static void | setPrintEndline (bool printEndline) |
static void | setPrintLevel (bool printLevel) |
static void | setPrintTime (bool printTime) |
static void | setPrintWhere (bool printWhere) |
static void | setPrintWhereFullPath (bool printWhereFullPath) |
static void | setType (Type type, const std::string &fileName=kDefaultLogFileName, bool append=true) |
static Type | type () |
static void | write (const char *msg,...) |
static void | write (ULogger::Level level, const char *file, int line, const char *function, const char *msg,...) |
Static Public Attributes | |
static const std::string | kDefaultLogFileName = "./ULog.txt" |
Protected Member Functions | |
void | _flush () |
ULogger () | |
virtual | ~ULogger () |
Static Protected Member Functions | |
static ULogger * | getInstance () |
Static Protected Attributes | |
static bool | append_ = true |
static std::string | logFileName_ |
Private Member Functions | |
virtual void | _write (const char *msg, va_list arg) |
virtual void | _writeStr (const char *msg) |
Static Private Member Functions | |
static ULogger * | createInstance () |
Static Private Attributes | |
static bool | buffered_ = false |
static std::string | bufferedMsgs_ |
static UDestroyer< ULogger > | destroyer_ |
static Level | eventLevel_ = kFatal |
static bool | exitingState_ = false |
static Level | exitLevel_ = kFatal |
static ULogger * | instance_ = 0 |
static Level | level_ = kInfo |
static const char * | levelName_ [5] = {"DEBUG", " INFO", " WARN", "ERROR", "FATAL"} |
static bool | limitWhereLength_ = false |
static UMutex | loggerMutex_ |
static bool | printColored_ = true |
static bool | printEndline_ = true |
static bool | printLevel_ = true |
static bool | printTime_ = true |
static bool | printWhere_ = true |
static bool | printWhereFullPath_ = false |
static Type | type_ = ULogger::kTypeNoLog |
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 |
enum ULogger::Type |
Loggers available:
ULogger::ULogger | ( | ) | [inline, protected] |
ULogger::~ULogger | ( | ) | [protected, virtual] |
Definition at line 603 of file ULogger.cpp.
void ULogger::_flush | ( | ) | [protected] |
Definition at line 241 of file ULogger.cpp.
virtual void ULogger::_write | ( | const char * | msg, |
va_list | arg | ||
) | [inline, private, virtual] |
Reimplemented in UFileLogger, and UConsoleLogger.
virtual void ULogger::_writeStr | ( | const char * | msg | ) | [inline, private, virtual] |
Reimplemented in UFileLogger, and UConsoleLogger.
ULogger * ULogger::createInstance | ( | ) | [static, private] |
Definition at line 588 of file ULogger.cpp.
static ULogger::Level ULogger::eventLevel | ( | ) | [inline, static] |
static ULogger::Level ULogger::exitLevel | ( | ) | [inline, static] |
void ULogger::flush | ( | ) | [static] |
ULogger * ULogger::getInstance | ( | ) | [static, protected] |
Definition at line 579 of file ULogger.cpp.
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. |
Definition at line 531 of file ULogger.cpp.
static bool ULogger::isBuffered | ( | ) | [inline, static] |
static bool ULogger::isPrintColored | ( | ) | [inline, static] |
static bool ULogger::isPrintEndLine | ( | ) | [inline, static] |
static bool ULogger::isPrintLevel | ( | ) | [inline, static] |
static bool ULogger::isPrintTime | ( | ) | [inline, static] |
static bool ULogger::isPrintWhere | ( | ) | [inline, static] |
static bool ULogger::isPrintWhereFullPath | ( | ) | [inline, static] |
static ULogger::Level ULogger::level | ( | ) | [inline, static] |
void ULogger::reset | ( | ) | [static] |
Reset to default parameters.
Definition at line 203 of file ULogger.cpp.
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. |
Definition at line 218 of file ULogger.cpp.
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] |
static void ULogger::setPrintColored | ( | bool | printColored | ) | [inline, static] |
static void ULogger::setPrintEndline | ( | bool | printEndline | ) | [inline, static] |
static void ULogger::setPrintLevel | ( | bool | printLevel | ) | [inline, static] |
static void ULogger::setPrintTime | ( | bool | printTime | ) | [inline, static] |
static void ULogger::setPrintWhere | ( | bool | printWhere | ) | [inline, static] |
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.
Definition at line 175 of file ULogger.cpp.
static Type ULogger::type | ( | ) | [inline, static] |
void ULogger::write | ( | const char * | msg, |
... | |||
) | [static] |
Write a message directly to logger without level handling.
msg | the message to write. |
... | the variable arguments |
Definition at line 247 of file ULogger.cpp.
void ULogger::write | ( | ULogger::Level | level, |
const char * | file, | ||
int | line, | ||
const char * | function, | ||
const char * | msg, | ||
... | |||
) | [static] |
Definition at line 307 of file ULogger.cpp.
friend class UDestroyer< ULogger > [friend] |
bool ULogger::append_ = true [static, protected] |
bool ULogger::buffered_ = false [static, private] |
std::string ULogger::bufferedMsgs_ [static, private] |
Reimplemented in UFileLogger.
UDestroyer< ULogger > ULogger::destroyer_ [static, private] |
ULogger::Level ULogger::eventLevel_ = kFatal [static, private] |
bool ULogger::exitingState_ = false [static, private] |
ULogger::Level ULogger::exitLevel_ = kFatal [static, private] |
ULogger * ULogger::instance_ = 0 [static, private] |
const std::string ULogger::kDefaultLogFileName = "./ULog.txt" [static] |
ULogger::Level ULogger::level_ = kInfo [static, private] |
const char * ULogger::levelName_ = {"DEBUG", " INFO", " WARN", "ERROR", "FATAL"} [static, private] |
bool ULogger::limitWhereLength_ = false [static, private] |
std::string ULogger::logFileName_ [static, protected] |
UMutex ULogger::loggerMutex_ [static, private] |
bool ULogger::printColored_ = true [static, private] |
bool ULogger::printEndline_ = true [static, private] |
bool ULogger::printLevel_ = true [static, private] |
bool ULogger::printTime_ = true [static, private] |
bool ULogger::printWhere_ = true [static, private] |
bool ULogger::printWhereFullPath_ = false [static, private] |
ULogger::Type ULogger::type_ = ULogger::kTypeNoLog [static, private] |