2#include <winpr/tchar.h>
13static const char* function =
nullptr;
14static const char* channels[] = {
"com.test.channelA",
"com.test.channelB" };
16static const test_t messages[] = { { WLOG_INFO,
"this is a test",
"com.test.channelA" },
17 { WLOG_INFO,
"Just some info",
"com.test.channelB" },
18 { WLOG_WARN,
"this is a %dnd %s",
"com.test.channelA" },
19 { WLOG_WARN,
"we're warning a %dnd %s",
"com.test.channelB" },
20 { WLOG_ERROR,
"this is an error",
"com.test.channelA" },
21 { WLOG_ERROR,
"we've got an error",
"com.test.channelB" },
22 { WLOG_TRACE,
"this is a trace output",
"com.test.channelA" },
23 { WLOG_TRACE,
"leaving a trace behind",
"com.test.channelB" } };
25static BOOL success = TRUE;
33 else if (strcmp(msg->FileName, __FILE__) != 0)
35 else if (strcmp(msg->FunctionName, function) != 0)
37 else if (strcmp(msg->PrefixString, messages[pos].channel) != 0)
39 else if (msg->Level != messages[pos].level)
41 else if (strcmp(msg->FormatString, messages[pos].msg) != 0)
47 (void)fprintf(stderr,
"Test failed!\n");
53static BOOL CallbackAppenderMessage(
const wLogMessage* msg)
59static BOOL CallbackAppenderData(
const wLogMessage* msg)
61 (void)fprintf(stdout,
"%s\n", __func__);
65static BOOL CallbackAppenderImage(
const wLogMessage* msg)
67 (void)fprintf(stdout,
"%s\n", __func__);
71static BOOL CallbackAppenderPackage(
const wLogMessage* msg)
73 (void)fprintf(stdout,
"%s\n", __func__);
77int TestWLogCallback(
int argc,
char* argv[])
82 wLogLayout* layout =
nullptr;
83 wLogAppender* appender =
nullptr;
91 root = WLog_GetRoot();
93 if (!WLog_SetLogAppenderType(root, WLOG_APPENDER_CALLBACK))
96 appender = WLog_GetLogAppender(root);
97 WINPR_ASSERT(appender);
99 callbacks.data = CallbackAppenderData;
100 callbacks.image = CallbackAppenderImage;
101 callbacks.message = CallbackAppenderMessage;
102 callbacks.package = CallbackAppenderPackage;
104 if (!WLog_ConfigureAppender(appender,
"callbacks", (
void*)&callbacks))
107 layout = WLog_GetLogLayout(root);
108 if (!WLog_Layout_SetPrefixFormat(root, layout,
"%mn"))
111 if (!WLog_OpenAppender(root))
114 logA = WLog_Get(channels[0]);
117 logB = WLog_Get(channels[1]);
120 if (!WLog_SetLogLevel(logA, WLOG_TRACE))
122 if (!WLog_SetLogLevel(logB, WLOG_TRACE))
125 WLog_Print(logA, messages[0].level, messages[0].msg);
126 WLog_Print(logB, messages[1].level, messages[1].msg);
127 WLog_Print(logA, messages[2].level, messages[2].msg, 2,
"test");
128 WLog_Print(logB, messages[3].level, messages[3].msg, 2,
"time");
129 WLog_Print(logA, messages[4].level, messages[4].msg);
130 WLog_Print(logB, messages[5].level, messages[5].msg);
131 WLog_Print(logA, messages[6].level, messages[6].msg);
132 WLog_Print(logB, messages[7].level, messages[7].msg);
134 if (!WLog_CloseAppender(root))
137 return success ? 0 : -1;