CLogManager.h 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. /*
  2. * CLogManager.h, part of VCMI engine
  3. *
  4. * Authors: listed in file AUTHORS in main folder
  5. *
  6. * License: GNU General Public License v2.0 or later
  7. * Full text of license available in license.txt file, in main folder
  8. *
  9. */
  10. #pragma once
  11. class CGLogger;
  12. class CLoggerDomain;
  13. /**
  14. * The log manager is a global storage of all logger objects.
  15. */
  16. class DLL_LINKAGE CLogManager : public boost::noncopyable
  17. {
  18. public:
  19. ~CLogManager();
  20. // Methods
  21. /**
  22. * Gets an instance of the log manager.
  23. *
  24. * @return an instance of the log manager
  25. */
  26. static CLogManager * get();
  27. /**
  28. * Adds a logger. The log manager holds strong ownership of the logger object.
  29. *
  30. * @param logger The logger to add.
  31. */
  32. void addLogger(CGLogger * logger);
  33. /**
  34. * Gets a logger by domain.
  35. *
  36. * @param domain The domain of the logger.
  37. * @return a logger by domain or nullptr if the logger was not found
  38. */
  39. CGLogger * getLogger(const CLoggerDomain & domain);
  40. private:
  41. // Methods
  42. CLogManager();
  43. // Data members
  44. static CLogManager * instance;
  45. std::map<std::string, CGLogger *> loggers;
  46. mutable boost::shared_mutex mx;
  47. static boost::mutex smx;
  48. };