Logger.h
1 /**************************************************************************************
2 Copyright 2015 Applied Research Associates, Inc.
3 Licensed under the Apache License, Version 2.0 (the "License"); you may not use
4 this file except in compliance with the License. You may obtain a copy of the License
5 at:
6 http://www.apache.org/licenses/LICENSE-2.0
7 Unless required by applicable law or agreed to in writing, software distributed under
8 the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
9 CONDITIONS OF ANY KIND, either express or implied. See the License for the
10 specific language governing permissions and limitations under the License.
11 **************************************************************************************/
12 
13 #pragma once
14 #include <sstream>
15 
16 #pragma warning(push)
17 #pragma warning(disable : 4512) // assignment operator could not be generated
18 #pragma warning(disable : 4290) // C++ exception specification ignored except to indicate a function is not __declspec(nothrow)
19 #include <log4cpp/Category.hh>
20 #pragma warning(pop)
21 
22 #include <biogears/cdm/CommonDataModel.h>
23 
24 namespace biogears {
25 class Logger;
26 class SEScalarTime;
27 class BIOGEARS_API Loggable {
28 public:
29  static const std::string empty;
30  static const char* empty_cStr;
31 
32  Loggable();
33  Loggable(Logger* log);
34  virtual ~Loggable();
35 
36  virtual Logger* GetLogger() const;
37 
38 protected:
39  virtual void Debug(const char* msg, const char* origin = "") const;
40  virtual void Debug(const std::string& msg, const std::string& origin = empty) const;
41  virtual void Debug(std::ostream& msg, const std::string& origin = empty) const;
42 
43  virtual void Info(const char* msg, const char* origin = "") const;
44  virtual void Info(const std::string& msg, const std::string& origin = empty) const;
45  virtual void Info(std::ostream& msg, const std::string& origin = empty) const;
46 
47  virtual void Warning(const char* msg, const char* origin = "") const;
48  virtual void Warning(const std::string& msg, const std::string& origin = empty) const;
49  virtual void Warning(std::ostream& msg, const std::string& origin = empty) const;
50 
51  virtual void Error(const char* msg, const char* origin = "") const;
52  virtual void Error(const std::string msg, const std::string origin = empty) const;
53  virtual void Error(std::ostream& msg, const std::string& origin = empty) const;
54 
55  virtual void Fatal(const char* msg, const char* origin = "") const;
56  virtual void Fatal(const std::string& msg, const std::string& origin = empty) const;
57  virtual void Fatal(std::ostream& msg, const std::string& origin = empty) const;
58 
60 };
61 
62 #pragma warning(push)
63 #pragma warning(disable : 4100)
64 class BIOGEARS_API LoggerForward {
65 public:
66  virtual void ForwardDebug(const std::string& msg, const std::string& origin) = 0;
67  virtual void ForwardInfo(const std::string& msg, const std::string& origin) = 0;
68  virtual void ForwardWarning(const std::string& msg, const std::string& origin) = 0;
69  virtual void ForwardError(const std::string& msg, const std::string& origin) = 0;
70  virtual void ForwardFatal(const std::string& msg, const std::string& origin) = 0;
71 };
72 
73 #pragma warning(pop)
74 
75 class BIOGEARS_API Logger {
76  friend Loggable;
77 
78 public:
79  Logger(const std::string& logFilename = Loggable::empty, const std::string& working_dir = Loggable::empty);
80  Logger(const char* logFilename, const char* working_dir = Loggable::empty_cStr);
81  virtual ~Logger();
82 
83  void LogToConsole(bool log_to_console);
84  void FormatMessages(bool format_messages);
85 
86  void ResetLogFile(const std::string& logFilename = Loggable::empty, const std::string& working_dir = Loggable::empty);
87  void ResetLogFile(const char* logFilename, const char* working_dir = Loggable::empty_cStr);
88 
89  void SetLogLevel(log4cpp::Priority::Value priority) const;
90  void SetConsoleLogLevel(log4cpp::Priority::Value priority) const;
91  log4cpp::Priority::Value GetLogLevel();
92 
93  virtual void SetLogTime(const SEScalarTime* time);
94 
95  void SetsetConversionPattern(const std::string&);
96  void SetConsolesetConversionPattern(const std::string&);
97 
98  virtual void SetForward(LoggerForward* forward);
99  virtual bool HasForward();
100 
101  virtual void Debug(const std::string& msg, std::string const& origin = Loggable::empty) const;
102  virtual void Info(const std::string& msg, std::string const& origin = Loggable::empty) const;
103  virtual void Warning(const std::string& msg, std::string const& origin = Loggable::empty) const;
104  virtual void Error(const std::string& msg, std::string const& origin = Loggable::empty) const;
105  virtual void Fatal(const std::string& msg, std::string const& origin = Loggable::empty) const;
106 
107  virtual void Debug(std::ostream const& msg, std::string const& origin = Loggable::empty) const;
108  virtual void Info(std::ostream const& msg, std::string const& origin = Loggable::empty) const;
109  virtual void Warning(std::ostream const& msg, std::string const& origin = Loggable::empty) const;
110  virtual void Error(std::ostream const& msg, std::string const& origin = Loggable::empty) const;
111  virtual void Fatal(std::ostream const& msg, std::string const& origin = Loggable::empty) const;
112 
113 protected:
114  virtual std::string FormatLogMessage(const std::string& origin, const std::string& msg) const;
115 
117  log4cpp::Category* m_Log;
118  log4cpp::Appender* m_FileAppender;
119  log4cpp::Appender* m_ConsoleAppender;
121  mutable std::stringstream m_ss;
123 };
124 }
log4cpp::Appender * m_FileAppender
Definition: Logger.h:118
const SEScalarTime * m_time
Definition: Logger.h:120
static const char * empty_cStr
Definition: Logger.h:30
static const std::string empty
Definition: Logger.h:29
Definition: Logger.h:27
Definition: Logger.h:75
Definition: Logger.h:64
Definition: SEScalarTime.h:37
friend Loggable
Definition: Logger.h:76
log4cpp::Category * m_Log
Definition: Logger.h:117
LoggerForward * m_Forward
Definition: Logger.h:116
Logger * m_Logger
Definition: Logger.h:59
std::stringstream m_ss
Definition: Logger.h:121
log4cpp::Appender * m_ConsoleAppender
Definition: Logger.h:119
Definition: SEElectricalCircuit.h:18
bool m_FormatMessages
Definition: Logger.h:122