GeNN  4.0.0
GPU enhanced Neuronal Networks (GeNN)
Init.h
Go to the documentation of this file.
1 #pragma once
2 #include <plog/Logger.h>
6 #include <cstring>
7 
8 namespace plog
9 {
10  namespace
11  {
12  bool isCsv(const util::nchar* fileName)
13  {
14  const util::nchar* dot = util::findExtensionDot(fileName);
15 #ifdef _WIN32
16  return dot && 0 == std::wcscmp(dot, L".csv");
17 #else
18  return dot && 0 == std::strcmp(dot, ".csv");
19 #endif
20  }
21  }
22 
24  // Empty initializer / one appender
25 
26  template<int instance>
27  inline Logger<instance>& init(Severity maxSeverity = none, IAppender* appender = NULL)
28  {
29  static Logger<instance> logger(maxSeverity);
30  return appender ? logger.addAppender(appender) : logger;
31  }
32 
33  inline Logger<PLOG_DEFAULT_INSTANCE>& init(Severity maxSeverity = none, IAppender* appender = NULL)
34  {
35  return init<PLOG_DEFAULT_INSTANCE>(maxSeverity, appender);
36  }
37 
39  // RollingFileAppender with any Formatter
40 
41  template<class Formatter, int instance>
42  inline Logger<instance>& init(Severity maxSeverity, const util::nchar* fileName, size_t maxFileSize = 0, int maxFiles = 0)
43  {
44  static RollingFileAppender<Formatter> rollingFileAppender(fileName, maxFileSize, maxFiles);
45  return init<instance>(maxSeverity, &rollingFileAppender);
46  }
47 
48  template<class Formatter>
49  inline Logger<PLOG_DEFAULT_INSTANCE>& init(Severity maxSeverity, const util::nchar* fileName, size_t maxFileSize = 0, int maxFiles = 0)
50  {
51  return init<Formatter, PLOG_DEFAULT_INSTANCE>(maxSeverity, fileName, maxFileSize, maxFiles);
52  }
53 
55  // RollingFileAppender with TXT/CSV chosen by file extension
56 
57  template<int instance>
58  inline Logger<instance>& init(Severity maxSeverity, const util::nchar* fileName, size_t maxFileSize = 0, int maxFiles = 0)
59  {
60  return isCsv(fileName) ? init<CsvFormatter, instance>(maxSeverity, fileName, maxFileSize, maxFiles) : init<TxtFormatter, instance>(maxSeverity, fileName, maxFileSize, maxFiles);
61  }
62 
63  inline Logger<PLOG_DEFAULT_INSTANCE>& init(Severity maxSeverity, const util::nchar* fileName, size_t maxFileSize = 0, int maxFiles = 0)
64  {
65  return init<PLOG_DEFAULT_INSTANCE>(maxSeverity, fileName, maxFileSize, maxFiles);
66  }
67 
69  // CHAR variants for Windows
70 
71 #ifdef _WIN32
72  template<class Formatter, int instance>
73  inline Logger<instance>& init(Severity maxSeverity, const char* fileName, size_t maxFileSize = 0, int maxFiles = 0)
74  {
75  return init<Formatter, instance>(maxSeverity, util::toWide(fileName).c_str(), maxFileSize, maxFiles);
76  }
77 
78  template<class Formatter>
79  inline Logger<PLOG_DEFAULT_INSTANCE>& init(Severity maxSeverity, const char* fileName, size_t maxFileSize = 0, int maxFiles = 0)
80  {
81  return init<Formatter, PLOG_DEFAULT_INSTANCE>(maxSeverity, fileName, maxFileSize, maxFiles);
82  }
83 
84  template<int instance>
85  inline Logger<instance>& init(Severity maxSeverity, const char* fileName, size_t maxFileSize = 0, int maxFiles = 0)
86  {
87  return init<instance>(maxSeverity, util::toWide(fileName).c_str(), maxFileSize, maxFiles);
88  }
89 
90  inline Logger<PLOG_DEFAULT_INSTANCE>& init(Severity maxSeverity, const char* fileName, size_t maxFileSize = 0, int maxFiles = 0)
91  {
92  return init<PLOG_DEFAULT_INSTANCE>(maxSeverity, fileName, maxFileSize, maxFiles);
93  }
94 #endif
95 }
Definition: AndroidAppender.h:5
Definition: Logger.h:13
Logger & addAppender(IAppender *appender)
Definition: Logger.h:20
Definition: RollingFileAppender.h:10
char nchar
Definition: Util.h:59
Logger< instance > & init(Severity maxSeverity=none, IAppender *appender=NULL)
Definition: Init.h:27
Definition: Severity.h:7
Definition: IAppender.h:6
const nchar * findExtensionDot(const nchar *fileName)
Definition: Util.h:210
Severity
Definition: Severity.h:5