Astra Linux Directory Client Core API  1.7.0
ALDLogProvider.h
См. документацию.
1 
6 #ifndef TRACE_LOG
7 #define TRACE_LOG
8 
9 #include <cstdio>
10 #include <string>
11 #include <ctime>
12 #include <sys/timeb.h>
13 #include <cstdarg>
14 #include <climits>
15 
16 using namespace std;
17 
18 namespace ALD
19 {
20 
26 #define LOG_PROVIDER CALDLogProvider::GetLogProvider()
28 
30 #define INIT_LOG_PROVIDER CALDLogProvider::InitLogProvider()
31 
33 #define FREE_LOG_PROVIDER CALDLogProvider::ReleseLogProvider()
34 
36 #define TRACE_FUNC_NAME __PRETTY_FUNCTION__
38 
39 #define TRACE_BEG_PREFIX "{"
40 #define TRACE_END_PREFIX "}"
41 #define TRACE_THREAD_ID pthread_self()
42 
43 #define TRACE_FB do{if(LOG_PROVIDER->m_LogSensitivity >= llTrace) LOG_PROVIDER->Trace(TRACE_FUNC_NAME, __FILE__, __LINE__, TRACE_BEG_PREFIX);}while(0)
44 #define TRACE_FE do{if(LOG_PROVIDER->m_LogSensitivity >= llTrace) LOG_PROVIDER->Trace(TRACE_FUNC_NAME, __FILE__, __LINE__, TRACE_END_PREFIX);}while(0)
45 #define TRACE(msg) do{if(LOG_PROVIDER->m_LogSensitivity >= llTrace) LOG_PROVIDER->Trace(TRACE_FUNC_NAME, __FILE__, __LINE__, msg);}while(0)
46 
47 #define TRACE_ LOG_PROVIDER->Trace(TRACE_FUNC_NAME, __FILE__, __LINE__,
48 #define _TRACE )
49 
50 #define TRACE_CFB do{if(LOG_PROVIDER->m_LogSensitivity >= llTrace) LOG_PROVIDER->Trace(TRACE_FUNC_NAME, __FILE__, __LINE__, "%p %s", this, TRACE_BEG_PREFIX);}while(0)
51 #define TRACE_CFE do{if(LOG_PROVIDER->m_LogSensitivity >= llTrace) LOG_PROVIDER->Trace(TRACE_FUNC_NAME, __FILE__, __LINE__, "%p %s", this, TRACE_END_PREFIX);}while(0)
52 
53 #define LOG_ERR(msg) LOG_PROVIDER->Put(llError, loInsertID, msg)
54 #define LOG_WARN(msg) LOG_PROVIDER->Put(llWarning, loInsertID, msg)
55 #define LOG_NOTICE(msg) LOG_PROVIDER->Put(llNotice, loInsertID, msg)
56 #define LOG_INFO(msg) LOG_PROVIDER->Put(llInfo, loInsertID, msg)
57 
58 #define LOG_DBG(msg) do{if(LOG_PROVIDER->m_LogSensitivity >= llDebug) LOG_PROVIDER->Put(llDebug, loInsertID, msg);}while(0)
59 
60 #define LOG_IMERR(msg) LOG_PROVIDER->Put(llError, loInsertID | loImmediately, msg)
61 #define LOG_IMWARN(msg) LOG_PROVIDER->Put(llWarning, loInsertID | loImmediately, msg)
62 #define LOG_IMNOTICE(msg) LOG_PROVIDER->Put(llNotice, loInsertID | loImmediately, msg)
63 #define LOG_IMINFO(msg) LOG_PROVIDER->Put(llInfo, loInsertID | loImmediately, msg)
64 
65 #define LOG_IMDBG(msg) do{if(LOG_PROVIDER->m_LogSensitivity >= llDebug) LOG_PROVIDER->Put(llDebug, loInsertID | loImmediately, msg);}while(0)
66 
67 #define LOG_OERR(opt, msg) LOG_PROVIDER->Put(llError, opt, msg)
68 #define LOG_OWARN(opt, msg) LOG_PROVIDER->Put(llWarning, opt, msg)
69 #define LOG_ONOTICE(opt, msg) LOG_PROVIDER->Put(llNotice, opt, msg)
70 #define LOG_OINFO(opt, msg) LOG_PROVIDER->Put(llInfo, opt, msg)
71 
72 #define LOG_ODBG(msg) do{if(LOG_PROVIDER->m_LogSensitivity >= llDebug) LOG_PROVIDER->Put(llDebug, opt, msg);}while(0)
73 
74 #define LOG_ERR_ LOG_PROVIDER->Put(llError, loInsertID,
75 #define LOG_WARN_ LOG_PROVIDER->Put(llWarning, loInsertID,
76 #define LOG_NOTICE_ LOG_PROVIDER->Put(llNotice, loInsertID,
77 #define LOG_INFO_ LOG_PROVIDER->Put(llInfo, loInsertID,
78 #define LOG_DBG_ LOG_PROVIDER->Put(llDebug, loInsertID,
79 #define _LOG )
80 
90 };
91 
93 enum ALDLogDest {
94  ldStdErr = 1,
95  ldSysLog = 2,
96  ldCSVLog = 4
97 };
98 
101  loEmpty = 0,
105 };
106 
111 {
112 protected:
113  FILE* m_pfDebug;
114  string m_strLogFile;
115  string m_strLogIdent;
116  struct timeb m_tmb;
117  time_t m_tstart;
118  size_t m_muteStdErr;
119 
127  void InternalPutSysLog(ALDLogLevel logLevel, unsigned long ulLogOption, const char *format, va_list ap);
128  void InternalPutStdErr(ALDLogLevel logLevel, unsigned long ulLogOption, const char *format, va_list ap);
129  void InternalPutCSVLog(ALDLogLevel logLevel, unsigned long ulLogOption, const char *format, va_list ap);
131 public:
132  bool m_bDetailed;
133  bool m_bSigInt;
135  unsigned long m_ulLogDests;
136 
138  const string& strLogFile() const {return m_strLogFile; }
140  const string& strLogIdent() const {return m_strLogIdent; }
141 
148  void Put(ALDLogLevel logLevel, unsigned long ulLogOption, const char *format, ...);
149 
155  inline void Put(ALDLogLevel logLevel, unsigned long ulLogOption, const string& strMsg)
156  {Put(logLevel, ulLogOption, strMsg.c_str());}
157 
165  void Trace(const string& strFn, const string& strFile, unsigned long ulLine, const char *format, ...);
166 
173  inline void Trace(const string& strFn, const string& strFile, unsigned long ulLine, const string& strMsg)
174  {Trace(strFn, strFile, ulLine, strMsg.c_str());}
175 
177  void OpenLog(const string& strLogIdent, const string& strFileName = "");
179  void CloseLog();
181  void TieToLogFile(int fd);
182 
184  void MuteStdErr(bool mute);
185 
187  static CALDLogProvider* GetLogProvider();
189  static void InitLogProvider();
191  static void ReleseLogProvider();
192 
193  CALDLogProvider();
194  ~CALDLogProvider();
195  size_t muteCout() const;
196  void setMuteCout(const size_t &muteCout);
197 };
198 
199 /*
200 const size_t MAX_CLOCK_T = (sizeof(clock_t) == 8)? LLONG_MAX: LONG_MAX;
201 
202 // profiler
203 class CALDProfiler
204 {
205 protected:
206  clock_t m_clkStart;
207 public:
208  CALDProfiler(){m_clkStart = clock();}
209  inline void start(){m_clkStart = clock();}
210  inline clock_t elapsed() const {clock_t clk = clock() - m_clkStart; if(clk < 0) clk += MAX_CLOCK_T; return clk;}
211  virtual ~CALDProfiler(){}
212 };
213 
214 #define LOG_PROF_EX(msg, lck, ll) LOG_PROVIDER->Put(ll, loInsertID | loImmediately, "%s:%d", msg, lck)
215 #define LOG_PROF(msg, lck) LOG_PROF_EX(msg, lck, llDebug)
216 
217 #define CLOCKS_PER_MSEC (CLOCKS_PER_SEC/1000)
218 
219 #define LOG_PROF_MS_EX(msg, lck, ll) LOG_PROVIDER->Put(ll, loInsertID | loImmediately, "%s:%f", msg, ((float)lck)/CLOCKS_PER_MSEC)
220 #define LOG_PROF_MS(msg, lck) LOG_PROF_MS_EX(msg, lck, llDebug)
221 */
223 } // ALD
224 
225 #endif // TRACE_LOG
Добавлять идентификатор процесса
Definition: ALDLogProvider.h:102
ALDLogLevel
Уровень журналирования
Definition: ALDLogProvider.h:83
void Put(ALDLogLevel logLevel, unsigned long ulLogOption, const string &strMsg)
Добавление сообщения в журнал
Definition: ALDLogProvider.h:155
const string & strLogIdent() const
Возвращает идентификатор (имя) журнала
Definition: ALDLogProvider.h:140
Поток ошибок stderr.
Definition: ALDLogProvider.h:94
Немедленный вывод
Definition: ALDLogProvider.h:104
Пространство имен основного интерфейса Astra Linux Directory.
Definition: action-definitions.h:9
STL namespace.
time_t m_tstart
Время начала журнала
Definition: ALDLogProvider.h:117
void Trace(const string &strFn, const string &strFile, unsigned long ulLine, const string &strMsg)
Добавление отладочного сообщения в журнал
Definition: ALDLogProvider.h:173
bool m_bDetailed
Признак повышенной детализации вывода
Definition: ALDLogProvider.h:132
string m_strLogIdent
Идентификатор (имя) журнала
Definition: ALDLogProvider.h:115
size_t m_muteStdErr
Счетчик глушения StdErr.
Definition: ALDLogProvider.h:118
Ошибки
Definition: ALDLogProvider.h:84
ALDLogLevel m_LogSensitivity
Уровень журналирования ALD.
Definition: ALDLogProvider.h:134
bool m_bSigInt
Признак режима прерывания SigInt.
Definition: ALDLogProvider.h:133
unsigned long m_ulLogDests
Маска целей журналирования
Definition: ALDLogProvider.h:135
Трассировка
Definition: ALDLogProvider.h:89
syslog
Definition: ALDLogProvider.h:95
const string & strLogFile() const
Возвращает путь к файлу журнала
Definition: ALDLogProvider.h:138
Базовый класс механизма журналирования Astra Linux Directory.
Definition: ALDLogProvider.h:110
string m_strLogFile
Путь к файлу журнала
Definition: ALDLogProvider.h:114
Вывод только в файл
Definition: ALDLogProvider.h:103
Уведомления
Definition: ALDLogProvider.h:86
ALDLogOption
Опции журналирования
Definition: ALDLogProvider.h:100
FILE * m_pfDebug
Объект FILE журнала
Definition: ALDLogProvider.h:113
Предупреждения
Definition: ALDLogProvider.h:85
Информация
Definition: ALDLogProvider.h:87
Отладка
Definition: ALDLogProvider.h:88
Отсутствие опций
Definition: ALDLogProvider.h:101
Текстовый файл
Definition: ALDLogProvider.h:96
ALDLogDest
Цели журналирования
Definition: ALDLogProvider.h:93