QsLogReadme.txt 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. QsLog - the simple Qt logger
  2. -------------------------------------------------------------------------------
  3. QsLog is an easy to use logger that is based on Qt's QDebug class.
  4. Features
  5. -------------------------------------------------------------------------------
  6. * Six logging levels (from trace to fatal)
  7. * Logging level threshold configurable at runtime.
  8. * Minimum overhead when logging is turned off.
  9. * Multiple destinations, comes with file and debug destinations.
  10. * Thread-safe
  11. * Logging of common Qt types out of the box.
  12. * Immediate logging or queueing messages in a separate thread.
  13. * Small dependency: just drop it in your project directly.
  14. Usage
  15. -------------------------------------------------------------------------------
  16. By directly including QsLog in your project:
  17. 1. Include QsLog.pri in your pro file
  18. 2. Include QsLog.h in your C++ files. Include QsLogDest.h only where you create/add destinations.
  19. 3. Get the instance of the logger by calling QsLogging::Logger::instance();
  20. 4. Optionally set the logging level. Info is default.
  21. 5. Create as many destinations as you want by using the QsLogging::DestinationFactory.
  22. 6. Add the destinations to the logger instance by calling addDestination.
  23. 7. Start logging!
  24. Note: when you want to use QsLog both from an executable and a shared library you have to
  25. link dynamically with QsLog due to a limitation with static variables.
  26. By linking to QsLog dynamically:
  27. 1. Build QsLog using the QsLogSharedLibrary.pro.
  28. 2. Add the QsLog shared library to your LIBS project dependencies.
  29. 3. Follow the steps in "directly including QsLog in your project" starting with step 2.
  30. Configuration
  31. -------------------------------------------------------------------------------
  32. QsLog has several configurable parameters:
  33. * defining QS_LOG_LINE_NUMBERS in the .pri file enables writing the file and line number
  34. automatically for each logging call
  35. * defining QS_LOG_SEPARATE_THREAD will route all log messages to a separate thread.
  36. Sometimes it's necessary to turn off logging. This can be done in several ways:
  37. * globally, at compile time, by enabling the QS_LOG_DISABLE macro in the .pri file.
  38. * globally, at run time, by setting the log level to "OffLevel".
  39. * per file, at compile time, by including QsLogDisableForThisFile.h in the target file.
  40. Thread safety
  41. -------------------------------------------------------------------------------
  42. The Qt docs say: A thread-safe function can be called simultaneously from multiple threads,
  43. even when the invocations use shared data, because all references to the shared data are serialized.
  44. A reentrant function can also be called simultaneously from multiple threads, but only if each
  45. invocation uses its own data.
  46. Since sending the log message to the destinations is protected by a mutex, the logging macros are
  47. thread-safe provided that the log has been initialized - i.e: instance() has been called.
  48. The instance function and the setup functions (e.g: setLoggingLevel, addDestination) are NOT
  49. thread-safe and are NOT reentrant.
  50. IMPORTANT: when using a separate thread for logging, your program might crash at exit time on some
  51. operating systems if you won't call Logger::destroyInstance() before your program exits.
  52. This function can be called either before returning from main in a console app or
  53. inside QCoreApplication::aboutToQuit in a Qt GUI app.
  54. The reason is that the logging thread is still running as some objects are destroyed by
  55. the OS. Calling destroyInstance will wait for the thread to finish.
  56. Nothing will happen if you forget to call the function when not using a separate thread
  57. for logging.