You.i Engine
YiLogPolicy.h
Go to the documentation of this file.
1 // © You i Labs Inc. 2000-2017. All rights reserved.
2 #ifndef _YI_LOG_POLICY_H_
3 #define _YI_LOG_POLICY_H_
4 
6 #include "thread/YiThread.h"
9 
15 class CYILoggingThread;
16 class CYILogger;
17 class CYILoggerCrashHandler;
18 class CYILogLinesCache;
19 
24 const uint32_t YI_LOG_MESSAGE_MAX_SIZE = 8192;
25 
79 {
80  friend class CYILogger;
81  friend class CYILoggerPriv;
82  friend class CYILoggingThread;
83  friend class CYILoggerCrashHandler;
84 
85 public:
89  CYILogPolicy();
90 
94  virtual ~CYILogPolicy();
95 
100  virtual void Open() = 0;
101 
106  virtual void Close() = 0;
107 
111  virtual bool IsOpen() const = 0;
112 
120  void PostWrite(YI_LOGGING_PARAMS &loggingParams);
121 
127  void SetPreferences(const std::shared_ptr<CYIPreferences> &pPrefs);
128 
132  const std::shared_ptr<CYIPreferences> &GetPreferences() const;
133 
137  void UpdateConfigMonitor() const;
138 
142  void SetWriteDirectEnabled(bool bEnabled);
143 
147  bool IsWriteDirectEnabled() const;
148 
152  void SetUseLinesCache(bool bUseLinesCache);
153 
159  std::vector<CYIString> GetLastLoggedLines(uint32_t uLinesCount = std::numeric_limits<uint32_t>::max()) const;
160 
161 protected:
162 
163  void EnableTimeStamp();
164  void EnableClassName();
165  void EnableLineNumber();
166  void EnableSeverity();
167  void EnableTagName();
168 
169  void DisableTimeStamp();
170  void DisableClassName();
171  void DisableLineNumber();
172  void DisableSeverity();
173  void DisableTagName();
174 
180  virtual CYIString BuildLogStatement(const CYIString &logStatement, const YI_LOGGING_PARAMS &params);
181 
186 
191 
192 private:
197  virtual void FlushLogQueue();
198 
202  CYILogPolicy(const CYILogPolicy &policy)
203  {
204  YI_UNUSED(policy);
205  }
206 
210  CYILogPolicy &operator=(const CYILogPolicy &policy)
211  {
212  YI_UNUSED(policy);
213  return *this;
214  }
215 
219  CYIString ParsePropertyName( const CYIString &propName,
220  const CYIString &prefix);
221 
226  YI_LOG_SEVERITY ParseSeverityType(const CYIString &propTagName);
227 
231  std::map<CYIString, YI_LOG_SEVERITY> BuildSeverityTagCache(
232  const CYIPreferences &prefs);
233 
239  virtual void _Write(const YI_LOGGING_PARAMS &loggingParams)
240  {
241  YI_UNUSED(loggingParams);
242  }
243 
247  virtual void _WriteDirect(const YI_LOGGING_PARAMS &loggingParams)
248  {
249  YI_UNUSED(loggingParams);
250  }
251 
255  std::shared_ptr<CYIPreferences> m_pPreferences;
256 
263  std::map<CYIString, YI_LOG_SEVERITY> m_severityTagCache;
264 
268  bool m_bDirectWriteEnabled;
269 
273  YI_LOG_SEVERITY m_eDefaultSeverity;
274 
279  char *m_pCachedVarArgMessage;
280 
284  CYIMutex m_workerMutex;
285 
289  CYIMutex m_cacheMsgMutex;
290 
294  mutable CYIMutex m_prefsMutex;
295 
299  CYILoggingThread *m_pLoggingWorker;
300 
304  CYILogLinesCache *m_pLinesCache;
305 
309  bool m_bDestroyingLogPolicy;
310 };
311 
314 #endif // _YI_LOG_POLICY_H_
friend class CYILoggerCrashHandler
Definition: YiLogPolicy.h:83
void PostWrite(YI_LOGGING_PARAMS &loggingParams)
const std::shared_ptr< CYIPreferences > & GetPreferences() const
void SetPreferences(const std::shared_ptr< CYIPreferences > &pPrefs)
void SetWriteDirectEnabled(bool bEnabled)
Definition: YiMutex.h:110
Container class for Unicode strings. Conceptually, a CYIString object is a sequence of Unicode charac...
Definition: YiString.h:35
The logging class reports messages to the programmer via a policy.
Definition: YiLogger.h:29
uint32_t m_uAttributeCache
Definition: YiLogPolicy.h:190
virtual ~CYILogPolicy()
friend class CYILoggerPriv
Definition: YiLogPolicy.h:81
YI_LOG_SEVERITY
Enumeration for the severity levels.
Definition: YiLoggerCommon.h:51
void EnableClassName()
Data type to hold various bits of information for logging.
Definition: YiLoggerCommon.h:67
void DisableSeverity()
void EnableSeverity()
void UpdateConfigMonitor() const
CYIConcurrentQueue< YI_LOGGING_PARAMS > m_logQueue
Definition: YiLogPolicy.h:185
void EnableTimeStamp()
void DisableTimeStamp()
void EnableTagName()
virtual CYIString BuildLogStatement(const CYIString &logStatement, const YI_LOGGING_PARAMS &params)
void DisableLineNumber()
#define YI_UNUSED(param)
Definition: YiPredef.h:85
void SetUseLinesCache(bool bUseLinesCache)
void DisableClassName()
friend class CYILoggingThread
Definition: YiLogPolicy.h:82
virtual bool IsOpen() const =0
Definition: YiLogPolicy.h:78
virtual void Close()=0
void EnableLineNumber()
Property management class using CYIString names and values.
Definition: YiPreferences.h:22
std::vector< CYIString > GetLastLoggedLines(uint32_t uLinesCount=std::numeric_limits< uint32_t >::max()) const
const uint32_t YI_LOG_MESSAGE_MAX_SIZE
Definition: YiLogPolicy.h:24
bool IsWriteDirectEnabled() const
void DisableTagName()
virtual void Open()=0