/* */ #ifndef D_LOG_FACTORY_H #define D_LOG_FACTORY_H #include "common.h" #include #include "Logger.h" #include "SharedHandle.h" namespace aria2 { class LogFactory { private: static std::string filename_; static SharedHandle logger_; static bool consoleOutput_; static Logger::LEVEL logLevel_; static void openLogger(const SharedHandle& logger); LogFactory(); public: /** * Get logger instance. Returned logger is singleton. * This function is not thread-safe. */ static const SharedHandle& getInstance(); /** * Set a filename to write log. If name is "-", log is written to * stdout. If name is "", log is not written to file. */ static void setLogFile(const std::string& name); /** * Set flag whether the log is printed in console. * If f is false, log is not printed in console. */ static void setConsoleOutput(bool f) { consoleOutput_ = f; } /** * Set log level to output. */ static void setLogLevel(Logger::LEVEL level); /** * Set log level to output by string represention of log level. * Possible values are: debug, info, notice, warn, error */ static void setLogLevel(const std::string& level); /** * Releases used resources */ static void release(); static void reconfigure(); }; #define A2_LOG_DEBUG_ENABLED \ aria2::LogFactory::getInstance()->levelEnabled(Logger::A2_DEBUG) #define A2_LOG(level, msg) \ { \ const aria2::SharedHandle& logger = \ aria2::LogFactory::getInstance(); \ if(logger->levelEnabled(level)) \ logger->log(level, __FILE__, __LINE__, msg); \ } #define A2_LOG_EX(level, msg, ex) \ { \ const aria2::SharedHandle& logger = \ aria2::LogFactory::getInstance(); \ if(logger->levelEnabled(level)) \ logger->log(level, __FILE__, __LINE__, msg, ex); \ } #define A2_LOG_DEBUG(msg) A2_LOG(Logger::A2_DEBUG, msg) #define A2_LOG_DEBUG_EX(msg, ex) A2_LOG_EX(Logger::A2_DEBUG, msg, ex) #define A2_LOG_INFO(msg) A2_LOG(Logger::A2_INFO, msg) #define A2_LOG_INFO_EX(msg, ex) A2_LOG_EX(Logger::A2_INFO, msg, ex) #define A2_LOG_NOTICE(msg) A2_LOG(Logger::A2_NOTICE, msg) #define A2_LOG_NOTICE_EX(msg, ex) A2_LOG_EX(Logger::A2_NOTICE, msg, ex) #define A2_LOG_WARN(msg) A2_LOG(Logger::A2_WARN, msg) #define A2_LOG_WARN_EX(msg, ex) A2_LOG_EX(Logger::A2_WARN, msg, ex) #define A2_LOG_ERROR(msg) A2_LOG(Logger::A2_ERROR, msg) #define A2_LOG_ERROR_EX(msg, ex) A2_LOG_EX(Logger::A2_ERROR, msg, ex) } // namespace aria2 #endif // D_LOG_FACTORY_H