33#include <winpr/wtypes.h>
34#include <winpr/winpr.h>
35#include <winpr/synch.h>
36#include <winpr/thread.h>
48#define WLOG_LEVEL_INHERIT 0xFFFF
53#define WLOG_MESSAGE_TEXT 0
54#define WLOG_MESSAGE_DATA 1
55#define WLOG_MESSAGE_IMAGE 2
56#define WLOG_MESSAGE_PACKET 3
61#define WLOG_APPENDER_CONSOLE 0
62#define WLOG_APPENDER_FILE 1
63#define WLOG_APPENDER_BINARY 2
64#define WLOG_APPENDER_CALLBACK 3
65#define WLOG_APPENDER_SYSLOG 4
66#define WLOG_APPENDER_JOURNALD 5
67#define WLOG_APPENDER_UDP 6
104 typedef struct s_wLog wLog;
106#define WLOG_PACKET_INBOUND 1
107#define WLOG_PACKET_OUTBOUND 2
109 WINPR_API BOOL WLog_PrintMessage(wLog* log, DWORD type, DWORD level,
size_t line,
110 const char* file,
const char* function, ...);
111 WINPR_API BOOL WLog_PrintMessageVA(wLog* log, DWORD type, DWORD level,
size_t line,
112 const char* file,
const char* function, va_list args);
114 WINPR_API wLog* WLog_GetRoot(
void);
115 WINPR_API wLog* WLog_Get(LPCSTR name);
116 WINPR_API DWORD WLog_GetLogLevel(wLog* log);
117 WINPR_API BOOL WLog_IsLevelActive(wLog* _log, DWORD _log_level);
129 WINPR_API BOOL WLog_SetContext(wLog* log,
const char* (*fkt)(
void*),
void* context);
131#define WLog_Print_unchecked(_log, _log_level, ...) \
134 WLog_PrintMessage(_log, WLOG_MESSAGE_TEXT, _log_level, __LINE__, __FILE__, __func__, \
138#define WLog_Print(_log, _log_level, ...) \
141 if (WLog_IsLevelActive(_log, _log_level)) \
143 WLog_Print_unchecked(_log, _log_level, __VA_ARGS__); \
147#define WLog_Print_tag(_tag, _log_level, ...) \
150 static wLog* _log_cached_ptr = NULL; \
151 if (!_log_cached_ptr) \
152 _log_cached_ptr = WLog_Get(_tag); \
153 WLog_Print(_log_cached_ptr, _log_level, __VA_ARGS__); \
156#define WLog_PrintVA_unchecked(_log, _log_level, _args) \
159 WLog_PrintMessageVA(_log, WLOG_MESSAGE_TEXT, _log_level, __LINE__, __FILE__, __func__, \
163#define WLog_PrintVA(_log, _log_level, _args) \
166 if (WLog_IsLevelActive(_log, _log_level)) \
168 WLog_PrintVA_unchecked(_log, _log_level, _args); \
172#define WLog_Data(_log, _log_level, ...) \
175 if (WLog_IsLevelActive(_log, _log_level)) \
177 WLog_PrintMessage(_log, WLOG_MESSAGE_DATA, _log_level, __LINE__, __FILE__, __func__, \
182#define WLog_Image(_log, _log_level, ...) \
185 if (WLog_IsLevelActive(_log, _log_level)) \
187 WLog_PrintMessage(_log, WLOG_MESSAGE_DATA, _log_level, __LINE__, __FILE__, __func__, \
192#define WLog_Packet(_log, _log_level, ...) \
195 if (WLog_IsLevelActive(_log, _log_level)) \
197 WLog_PrintMessage(_log, WLOG_MESSAGE_PACKET, _log_level, __LINE__, __FILE__, __func__, \
202 static inline void WLog_Print_dbg_tag(
const char* WINPR_RESTRICT tag, DWORD log_level,
203 size_t line,
const char* file,
const char* fkt, ...)
205 static wLog* log_cached_ptr = NULL;
207 log_cached_ptr = WLog_Get(tag);
209 if (WLog_IsLevelActive(log_cached_ptr, log_level))
213 WLog_PrintMessageVA(log_cached_ptr, WLOG_MESSAGE_TEXT, log_level, line, file, fkt, ap);
218#define WLog_LVL(tag, lvl, ...) \
219 WLog_Print_dbg_tag(tag, lvl, __LINE__, __FILE__, __func__, __VA_ARGS__)
220#define WLog_VRB(tag, ...) \
221 WLog_Print_dbg_tag(tag, WLOG_TRACE, __LINE__, __FILE__, __func__, __VA_ARGS__)
222#define WLog_DBG(tag, ...) \
223 WLog_Print_dbg_tag(tag, WLOG_DEBUG, __LINE__, __FILE__, __func__, __VA_ARGS__)
224#define WLog_INFO(tag, ...) \
225 WLog_Print_dbg_tag(tag, WLOG_INFO, __LINE__, __FILE__, __func__, __VA_ARGS__)
226#define WLog_WARN(tag, ...) \
227 WLog_Print_dbg_tag(tag, WLOG_WARN, __LINE__, __FILE__, __func__, __VA_ARGS__)
228#define WLog_ERR(tag, ...) \
229 WLog_Print_dbg_tag(tag, WLOG_ERROR, __LINE__, __FILE__, __func__, __VA_ARGS__)
230#define WLog_FATAL(tag, ...) \
231 WLog_Print_dbg_tag(tag, WLOG_FATAL, __LINE__, __FILE__, __func__, __VA_ARGS__)
233 WINPR_API BOOL WLog_SetLogLevel(wLog* log, DWORD logLevel);
234 WINPR_API BOOL WLog_SetStringLogLevel(wLog* log, LPCSTR level);
235 WINPR_API BOOL WLog_AddStringLogFilters(LPCSTR filter);
237 WINPR_API BOOL WLog_SetLogAppenderType(wLog* log, DWORD logAppenderType);
238 WINPR_API wLogAppender* WLog_GetLogAppender(wLog* log);
239 WINPR_API BOOL WLog_OpenAppender(wLog* log);
240 WINPR_API BOOL WLog_CloseAppender(wLog* log);
241 WINPR_API BOOL WLog_ConfigureAppender(wLogAppender* appender,
const char* setting,
void* value);
243 WINPR_API wLogLayout* WLog_GetLogLayout(wLog* log);
244 WINPR_API BOOL WLog_Layout_SetPrefixFormat(wLog* log, wLogLayout* layout,
const char* format);
246#if defined(WITH_WINPR_DEPRECATED)
248 WINPR_DEPRECATED(WINPR_API BOOL WLog_Init(
void));
250 WINPR_DEPRECATED(WINPR_API BOOL WLog_Uninit(
void));
253 typedef BOOL (*wLogCallbackMessage_t)(
const wLogMessage* msg);
254 typedef BOOL (*wLogCallbackData_t)(
const wLogMessage* msg);
255 typedef BOOL (*wLogCallbackImage_t)(
const wLogMessage* msg);
256 typedef BOOL (*wLogCallbackPackage_t)(
const wLogMessage* msg);
260 wLogCallbackData_t data;
261 wLogCallbackImage_t image;
262 wLogCallbackMessage_t message;
263 wLogCallbackPackage_t package;