mirror of https://github.com/aria2/aria2
2010-11-20 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Made LogFactory::logger_ as SharedHandle<Logger> to make dtor of Logger called at the program exit. Rewritten A2_LOG_* macro and moved them to LogFactory.h * src/LogFactory.cc * src/LogFactory.h * src/Logger.cc * src/Logger.hpull/1/head
parent
9a67929d8c
commit
c552842505
10
ChangeLog
10
ChangeLog
|
@ -1,3 +1,13 @@
|
||||||
|
2010-11-20 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
|
Made LogFactory::logger_ as SharedHandle<Logger> to make dtor of
|
||||||
|
Logger called at the program exit. Rewritten A2_LOG_* macro and
|
||||||
|
moved them to LogFactory.h
|
||||||
|
* src/LogFactory.cc
|
||||||
|
* src/LogFactory.h
|
||||||
|
* src/Logger.cc
|
||||||
|
* src/Logger.h
|
||||||
|
|
||||||
2010-11-20 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
2010-11-20 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
Renamed cuid as cuid_t in DefaultBtMessageDispatcher.
|
Renamed cuid as cuid_t in DefaultBtMessageDispatcher.
|
||||||
|
|
|
@ -40,11 +40,11 @@
|
||||||
namespace aria2 {
|
namespace aria2 {
|
||||||
|
|
||||||
std::string LogFactory::filename_ = DEV_NULL;
|
std::string LogFactory::filename_ = DEV_NULL;
|
||||||
Logger* LogFactory::logger_ = 0;
|
SharedHandle<Logger> LogFactory::logger_;
|
||||||
bool LogFactory::consoleOutput_ = true;
|
bool LogFactory::consoleOutput_ = true;
|
||||||
Logger::LEVEL LogFactory::logLevel_ = Logger::A2_DEBUG;
|
Logger::LEVEL LogFactory::logLevel_ = Logger::A2_DEBUG;
|
||||||
|
|
||||||
void LogFactory::openLogger(Logger* logger)
|
void LogFactory::openLogger(const SharedHandle<Logger>& logger)
|
||||||
{
|
{
|
||||||
if(filename_ != DEV_NULL) {
|
if(filename_ != DEV_NULL) {
|
||||||
// don't open file DEV_NULL for performance sake.
|
// don't open file DEV_NULL for performance sake.
|
||||||
|
@ -67,21 +67,17 @@ void LogFactory::reconfigure()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger* LogFactory::getInstance() {
|
const SharedHandle<Logger>& LogFactory::getInstance()
|
||||||
|
{
|
||||||
if(!logger_) {
|
if(!logger_) {
|
||||||
Logger* slogger = new Logger();
|
SharedHandle<Logger> slogger(new Logger());
|
||||||
try {
|
openLogger(slogger);
|
||||||
openLogger(slogger);
|
|
||||||
} catch(RecoverableException& e) {
|
|
||||||
delete slogger;
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
if(consoleOutput_) {
|
if(consoleOutput_) {
|
||||||
slogger->setStdoutLogLevel(Logger::A2_NOTICE, true);
|
slogger->setStdoutLogLevel(Logger::A2_NOTICE, true);
|
||||||
slogger->setStdoutLogLevel(Logger::A2_WARN, true);
|
slogger->setStdoutLogLevel(Logger::A2_WARN, true);
|
||||||
slogger->setStdoutLogLevel(Logger::A2_ERROR, true);
|
slogger->setStdoutLogLevel(Logger::A2_ERROR, true);
|
||||||
}
|
}
|
||||||
logger_ = slogger;
|
logger_.swap(slogger);
|
||||||
}
|
}
|
||||||
return logger_;
|
return logger_;
|
||||||
}
|
}
|
||||||
|
@ -118,8 +114,7 @@ void LogFactory::setLogLevel(const std::string& level)
|
||||||
}
|
}
|
||||||
|
|
||||||
void LogFactory::release() {
|
void LogFactory::release() {
|
||||||
delete logger_;
|
logger_.reset();
|
||||||
logger_ = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace aria2
|
} // namespace aria2
|
||||||
|
|
|
@ -40,24 +40,26 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#include "Logger.h"
|
#include "Logger.h"
|
||||||
|
#include "SharedHandle.h"
|
||||||
|
|
||||||
namespace aria2 {
|
namespace aria2 {
|
||||||
|
|
||||||
class LogFactory {
|
class LogFactory {
|
||||||
private:
|
private:
|
||||||
static std::string filename_;
|
static std::string filename_;
|
||||||
// TODO consider SharedHandle
|
static SharedHandle<Logger> logger_;
|
||||||
static Logger* logger_;
|
|
||||||
static bool consoleOutput_;
|
static bool consoleOutput_;
|
||||||
static Logger::LEVEL logLevel_;
|
static Logger::LEVEL logLevel_;
|
||||||
|
|
||||||
static void openLogger(Logger* logger);
|
static void openLogger(const SharedHandle<Logger>& logger);
|
||||||
|
|
||||||
|
LogFactory();
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* Get logger instance. Returned logger is singleton.
|
* Get logger instance. Returned logger is singleton.
|
||||||
* This function is not thread-safe.
|
* This function is not thread-safe.
|
||||||
*/
|
*/
|
||||||
static Logger* getInstance();
|
static const SharedHandle<Logger>& getInstance();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set a filename to write log. If name is "-", log is written to
|
* Set a filename to write log. If name is "-", log is written to
|
||||||
|
@ -69,7 +71,8 @@ public:
|
||||||
* Set flag whether the log is printed in console.
|
* Set flag whether the log is printed in console.
|
||||||
* If f is false, log is not printed in console.
|
* If f is false, log is not printed in console.
|
||||||
*/
|
*/
|
||||||
static void setConsoleOutput(bool f) {
|
static void setConsoleOutput(bool f)
|
||||||
|
{
|
||||||
consoleOutput_ = f;
|
consoleOutput_ = f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,6 +95,39 @@ public:
|
||||||
static void reconfigure();
|
static void reconfigure();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define A2_LOG_DEBUG_ENABLED \
|
||||||
|
aria2::LogFactory::getInstance()->levelEnabled(Logger::A2_DEBUG)
|
||||||
|
|
||||||
|
#define A2_LOG(level, msg) \
|
||||||
|
{ \
|
||||||
|
const aria2::SharedHandle<aria2::Logger>& logger = \
|
||||||
|
aria2::LogFactory::getInstance(); \
|
||||||
|
if(logger->levelEnabled(level)) \
|
||||||
|
logger->log(level, __FILE__, __LINE__, msg); \
|
||||||
|
}
|
||||||
|
#define A2_LOG_EX(level, msg, ex) \
|
||||||
|
{ \
|
||||||
|
const aria2::SharedHandle<aria2::Logger>& 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
|
} // namespace aria2
|
||||||
|
|
||||||
#endif // D_LOG_FACTORY_H
|
#endif // D_LOG_FACTORY_H
|
||||||
|
|
|
@ -62,10 +62,7 @@ Logger::Logger()
|
||||||
stdoutField_(0)
|
stdoutField_(0)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
Logger::~Logger()
|
Logger::~Logger() {}
|
||||||
{
|
|
||||||
closeFile();
|
|
||||||
}
|
|
||||||
|
|
||||||
void Logger::openFile(const std::string& filename)
|
void Logger::openFile(const std::string& filename)
|
||||||
{
|
{
|
||||||
|
@ -77,8 +74,6 @@ void Logger::openFile(const std::string& filename)
|
||||||
|
|
||||||
void Logger::closeFile()
|
void Logger::closeFile()
|
||||||
{
|
{
|
||||||
std::cerr << "Closing log file" << std::endl;
|
|
||||||
// TODO Do we need file_.is_open()?
|
|
||||||
if(file_.is_open()) {
|
if(file_.is_open()) {
|
||||||
file_.close();
|
file_.close();
|
||||||
}
|
}
|
||||||
|
|
69
src/Logger.h
69
src/Logger.h
|
@ -56,7 +56,10 @@ public:
|
||||||
private:
|
private:
|
||||||
LEVEL logLevel_;
|
LEVEL logLevel_;
|
||||||
std::ofstream file_;
|
std::ofstream file_;
|
||||||
int stdoutField_;
|
int stdoutField_;
|
||||||
|
// Don't allow copying
|
||||||
|
Logger(const Logger&);
|
||||||
|
Logger& operator=(const Logger&);
|
||||||
public:
|
public:
|
||||||
Logger();
|
Logger();
|
||||||
|
|
||||||
|
@ -104,70 +107,6 @@ public:
|
||||||
bool levelEnabled(LEVEL level);
|
bool levelEnabled(LEVEL level);
|
||||||
};
|
};
|
||||||
|
|
||||||
#define A2_LOG_DEBUG_ENABLED \
|
|
||||||
aria2::LogFactory::getInstance()->levelEnabled(Logger::A2_DEBUG)
|
|
||||||
|
|
||||||
#define A2_LOG_DEBUG(msg) \
|
|
||||||
{ \
|
|
||||||
aria2::Logger* logger = aria2::LogFactory::getInstance(); \
|
|
||||||
if(logger->levelEnabled(Logger::A2_DEBUG)) \
|
|
||||||
logger->log(Logger::A2_DEBUG, __FILE__, __LINE__, msg); \
|
|
||||||
}
|
|
||||||
#define A2_LOG_DEBUG_EX(msg, ex) \
|
|
||||||
{ \
|
|
||||||
aria2::Logger* logger = aria2::LogFactory::getInstance(); \
|
|
||||||
if(logger->levelEnabled(Logger::A2_DEBUG)) \
|
|
||||||
logger->log(Logger::A2_DEBUG, __FILE__, __LINE__, msg, ex); \
|
|
||||||
}
|
|
||||||
#define A2_LOG_INFO(msg) \
|
|
||||||
{ \
|
|
||||||
aria2::Logger* logger = aria2::LogFactory::getInstance(); \
|
|
||||||
if(logger->levelEnabled(Logger::A2_INFO)) \
|
|
||||||
logger->log(Logger::A2_INFO, __FILE__, __LINE__, msg); \
|
|
||||||
}
|
|
||||||
#define A2_LOG_INFO_EX(msg, ex) \
|
|
||||||
{ \
|
|
||||||
aria2::Logger* logger = aria2::LogFactory::getInstance(); \
|
|
||||||
if(logger->levelEnabled(Logger::A2_INFO)) \
|
|
||||||
logger->log(Logger::A2_INFO, __FILE__, __LINE__, msg, ex); \
|
|
||||||
}
|
|
||||||
#define A2_LOG_NOTICE(msg) \
|
|
||||||
{ \
|
|
||||||
aria2::Logger* logger = aria2::LogFactory::getInstance(); \
|
|
||||||
if(logger->levelEnabled(Logger::A2_NOTICE)) \
|
|
||||||
logger->log(Logger::A2_NOTICE, __FILE__, __LINE__, msg); \
|
|
||||||
}
|
|
||||||
#define A2_LOG_NOTICE_EX(msg, ex) \
|
|
||||||
{ \
|
|
||||||
aria2::Logger* logger = aria2::LogFactory::getInstance(); \
|
|
||||||
if(logger->levelEnabled(Logger::A2_NOTICE)) \
|
|
||||||
logger->log(Logger::A2_NOTICE, __FILE__, __LINE__, msg, ex); \
|
|
||||||
}
|
|
||||||
#define A2_LOG_WARN(msg) \
|
|
||||||
{ \
|
|
||||||
aria2::Logger* logger = aria2::LogFactory::getInstance(); \
|
|
||||||
if(logger->levelEnabled(Logger::A2_WARN)) \
|
|
||||||
logger->log(Logger::A2_WARN, __FILE__, __LINE__, msg); \
|
|
||||||
}
|
|
||||||
#define A2_LOG_WARN_EX(msg, ex) \
|
|
||||||
{ \
|
|
||||||
aria2::Logger* logger = aria2::LogFactory::getInstance(); \
|
|
||||||
if(logger->levelEnabled(Logger::A2_WARN)) \
|
|
||||||
logger->log(Logger::A2_WARN, __FILE__, __LINE__, msg, ex); \
|
|
||||||
}
|
|
||||||
#define A2_LOG_ERROR(msg) \
|
|
||||||
{ \
|
|
||||||
aria2::Logger* logger = aria2::LogFactory::getInstance(); \
|
|
||||||
if(logger->levelEnabled(Logger::A2_ERROR)) \
|
|
||||||
logger->log(Logger::A2_ERROR, __FILE__, __LINE__, msg); \
|
|
||||||
}
|
|
||||||
#define A2_LOG_ERROR_EX(msg, ex) \
|
|
||||||
{ \
|
|
||||||
aria2::Logger* logger = aria2::LogFactory::getInstance(); \
|
|
||||||
if(logger->levelEnabled(Logger::A2_ERROR)) \
|
|
||||||
logger->log(Logger::A2_ERROR, __FILE__, __LINE__, msg, ex); \
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace aria2
|
} // namespace aria2
|
||||||
|
|
||||||
#endif // D_LOGGER_H
|
#endif // D_LOGGER_H
|
||||||
|
|
Loading…
Reference in New Issue