#pragma once #include #include #include #include #include namespace plog { namespace { bool isCsv(const util::nchar* fileName) { const util::nchar* dot = util::findExtensionDot(fileName); #ifdef _WIN32 return dot && 0 == std::wcscmp(dot, L".csv"); #else return dot && 0 == std::strcmp(dot, ".csv"); #endif } } ////////////////////////////////////////////////////////////////////////// // Empty initializer / one appender template inline Logger& init(Severity maxSeverity = none, IAppender* appender = NULL) { static Logger logger(maxSeverity); return appender ? logger.addAppender(appender) : logger; } inline Logger& init(Severity maxSeverity = none, IAppender* appender = NULL) { return init(maxSeverity, appender); } ////////////////////////////////////////////////////////////////////////// // RollingFileAppender with any Formatter template inline Logger& init(Severity maxSeverity, const util::nchar* fileName, size_t maxFileSize = 0, int maxFiles = 0) { static RollingFileAppender rollingFileAppender(fileName, maxFileSize, maxFiles); return init(maxSeverity, &rollingFileAppender); } template inline Logger& init(Severity maxSeverity, const util::nchar* fileName, size_t maxFileSize = 0, int maxFiles = 0) { return init(maxSeverity, fileName, maxFileSize, maxFiles); } ////////////////////////////////////////////////////////////////////////// // RollingFileAppender with TXT/CSV chosen by file extension template inline Logger& init(Severity maxSeverity, const util::nchar* fileName, size_t maxFileSize = 0, int maxFiles = 0) { return isCsv(fileName) ? init(maxSeverity, fileName, maxFileSize, maxFiles) : init(maxSeverity, fileName, maxFileSize, maxFiles); } inline Logger& init(Severity maxSeverity, const util::nchar* fileName, size_t maxFileSize = 0, int maxFiles = 0) { return init(maxSeverity, fileName, maxFileSize, maxFiles); } ////////////////////////////////////////////////////////////////////////// // CHAR variants for Windows #ifdef _WIN32 template inline Logger& init(Severity maxSeverity, const char* fileName, size_t maxFileSize = 0, int maxFiles = 0) { return init(maxSeverity, util::toWide(fileName).c_str(), maxFileSize, maxFiles); } template inline Logger& init(Severity maxSeverity, const char* fileName, size_t maxFileSize = 0, int maxFiles = 0) { return init(maxSeverity, fileName, maxFileSize, maxFiles); } template inline Logger& init(Severity maxSeverity, const char* fileName, size_t maxFileSize = 0, int maxFiles = 0) { return init(maxSeverity, util::toWide(fileName).c_str(), maxFileSize, maxFiles); } inline Logger& init(Severity maxSeverity, const char* fileName, size_t maxFileSize = 0, int maxFiles = 0) { return init(maxSeverity, fileName, maxFileSize, maxFiles); } #endif }