|
| CamiTKLogger () |
| Default constructor. More...
|
|
bool | getDebugInformation () override |
|
QFileInfo | getLogFileInfo () override |
|
LogLevel | getLogLevel () override |
| Get Current verbosity level of the log: More...
|
|
bool | getLogToFile () override |
| check if the logger is currently writing on a file More...
|
|
bool | getLogToStandardOutput () override |
| check if the logger is currently writing on standard output (std::cout) More...
|
|
LogLevel | getMessageBoxLevel () override |
|
bool | getTimeStampInformation () override |
|
QString | log (const QString msg, const LogLevel level, char const *fileName, char const *methodName, int lineNumber, const QObject *sender=nullptr) override final |
| Log a message: If the logger is allowed to write on standard output, it will display the message (and timestamp) on the standard output If the logger is allowed to write on a file, it will also display the message in the log file. More...
|
|
void | setDebugInformation (bool) override |
| Allows the logger to add debug information to the log message. More...
|
|
bool | setLogFileDirectory (QDir directoryName, bool moveExistingLogFile=true) override |
| Set the specific directory to write to (default is the subdirectory "CamiTK" in the system temporary directory). More...
|
|
void | setLogLevel (LogLevel level) override |
| Sets Current verbosity level of the log: More...
|
|
bool | setLogToFile (bool writeToFile) override |
| Allows the logger to write to the log file. More...
|
|
void | setLogToStandardOutput (bool writeToStdOut) override |
| Allows the logger to write on std::cout. More...
|
|
void | setMessageBoxLevel (LogLevel level) override |
| Set the lowest log level that will open modal message box for messages instead of (silently/undisruptedly) write on std output. More...
|
|
void | setTimeStampInformation (bool showTimeStamp) override |
| By default a logger should always show the time-stamp in the form of "yyyy-MM-dd HH:mm:ss.zzz" In test environment, reproducible log message might be prefered. More...
|
|
| ~CamiTKLogger () override |
| Destructor. More...
|
|
virtual | ~InterfaceLogger ()=default |
| empty virtual destructor, to avoid memory leak More...
|
|
This is the default logger for CamiTK.
This class implements InterfaceLogger with the following default parameters:
- the verbosity log level is WARNING
- the message box level is NONE
- the log messages are written to the standard output
- the log messages are NOT written to a log file
- the debug information are NOT shown
- the timestamp is shown
- Note
- About the log file name The log file name is unique for a given instance of CamiTKLogger as it is based directly on the date/time of instantiantion unless the log file directory is modified during the life of the instance using setLogFileDirectory(). In this case a new date/time is generated inside setLogFileDirectory().
This way if the application or user decides to temporarily stop writing to the log file, all messages will be in the same file, even the one logged after the writing to the log file is resumed.
The log file name is "log-yyyy-MM-ddTHH-mm-ss.camitklog". The date/time format is based on ISO 8601 (as given by Qt::ISODate) with the difference that all ":" are replaced by "-", as ":" in file name does not always agree with Windows. The date/time It is based on the instantiation time (or the time the directory name was changed if is called after the instantiation)
- Note
- About writing log to file The default directory for the log file is the subdirectory "CamiTK" in the system temporary directory. The filename is automatically determined by the logger. The log file is opened in append mode. This ways, temporarily stop writing to the log file is possible without losing any data.
The log file is permanently kept open for performance reason, and is flushed everytime a log message is appended for safety. This should cover all normal case (even application crash). However, this does not prevent an external process (or user) to truncate or remove the current file. The former will result in missing log message, the latter will result in a complete loss of all previous message and of all newer message.
- Note
- About message box level When a log message is above the message box level, it will display a modal QMessageBox that depends on the log message level:
- TRACE and INFO messages are displayed in QMessageBox::Information dialogs
- WARNING messages are displayed in QMessageBox::Warning dialogs
- ERROR messages are displayed in QMessageBox::Critical dialogs The main text of the message box contains only the user message but a detailed text is available when the "Show details..." button is pressed. This way the main message to the user is not "polluted" by log timestamp and debug details, but they are both still available to the user (and can be copied to the clipboard for bug report or debugging session).
-
About logger self message CamiTKLogger also log some messages:
- during instantiation, when everything is ready, a TRACE message is logged
- when the configuration change (e.g., the log has changed) or the log file is opened/closed, TRACE messages are logged
- WARNING messages are logged when something strange occurs on the QTextStream used for logging in file
- ERROR messages are logged when the log file directory cannot be created, when the log file cannot be opened or when the QTextStream changed to WriteFailed status.
-
About debugging information Allows the logger to add debug information to the log message. Debug information contains the filename, line number and method names where the log was called. Note that the exact content of the method name debug information depends on the compiler.
-
About the log message The log macro message is log using the following format: yyyy-MM-dd HH:mm:ss.zzz [LEVEL] [DEBUG_INFO] message ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^ ^if time stamp shown ^ if debug info shown
Moreover, if the log macro is used inside a CamiTK inherited class (e.g., Action, Component,...) then message is prepend with a specific text (see below)
- Note
- About log macro used inside a CamiTK inherited class If the log macro is used in a CamiTK inherited class, then it will automatically be prepend with a specific text.
For example:
- if a log macro is called from a camitk::Action or any class inheriting from camitk::Action then the text "Action 'MyActionName' - " is automatically added at the beginning of the log message
- if a log macro is called from a camitk::Component or any subclass, then the text "Component 'MyComponentName' - " is automatically added at the beginning of the log message
- ...
Action, Component, Viewer, Application, MainWindow, ComponentExtension and ActionExtension are currently supported.
QString camitk::CamiTKLogger::log |
( |
const QString |
msg, |
|
|
const LogLevel |
level, |
|
|
char const * |
fileName, |
|
|
char const * |
methodName, |
|
|
int |
lineNumber, |
|
|
const QObject * |
sender = nullptr |
|
) |
| |
|
finaloverridevirtual |
Log a message: If the logger is allowed to write on standard output, it will display the message (and timestamp) on the standard output If the logger is allowed to write on a file, it will also display the message in the log file.
The level parameter gives the current message level that has to be compared with the logger level: if this level is greater or equals to the current log level, the current message will be logged.
Example: if the logger level is at WARNING, only ERROR and WARNING level messages will be displayed.
If in a static method or a non QObject class, then call this method with an empty last parameter.
Implements camitk::InterfaceLogger.