#pragma once #include #include #include #include #include namespace plog { ////////////////////////////////////////////////////////////////////////// // RollingFileAppender with any Formatter template PLOG_LINKAGE_HIDDEN 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 namespace { inline bool isCsv(const util::nchar* fileName) { const util::nchar* dot = util::findExtensionDot(fileName); #if PLOG_CHAR_IS_UTF8 return dot && 0 == std::strcmp(dot, ".csv"); #else return dot && 0 == std::wcscmp(dot, L".csv"); #endif } } 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 #if defined(_WIN32) && !PLOG_CHAR_IS_UTF8 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 }