int TestWLogCallback(int argc, char* argv[]) { wLog* root; wLog* logA; wLog* logB; wLogLayout* layout; wLogAppender* appender; wLogCallbacks callbacks; function = __FUNCTION__; WLog_Init(); root = WLog_GetRoot(); WLog_SetLogAppenderType(root, WLOG_APPENDER_CALLBACK); appender = WLog_GetLogAppender(root); callbacks.data = CallbackAppenderData; callbacks.image = CallbackAppenderImage; callbacks.message = CallbackAppenderMessage; callbacks.package = CallbackAppenderPackage; if (!WLog_ConfigureAppender(appender, "callbacks", (void *)&callbacks)) return -1; layout = WLog_GetLogLayout(root); WLog_Layout_SetPrefixFormat(root, layout, "%mn"); WLog_OpenAppender(root); logA = WLog_Get(channels[0]); logB = WLog_Get(channels[1]); WLog_SetLogLevel(logA, WLOG_TRACE); WLog_SetLogLevel(logB, WLOG_TRACE); WLog_Print(logA, messages[0].level, messages[0].msg); WLog_Print(logB, messages[1].level, messages[1].msg); WLog_Print(logA, messages[2].level, messages[2].msg, 2, "test"); WLog_Print(logB, messages[3].level, messages[3].msg, 2, "time"); WLog_Print(logA, messages[4].level, messages[4].msg); WLog_Print(logB, messages[5].level, messages[5].msg); WLog_Print(logA, messages[6].level, messages[6].msg); WLog_Print(logB, messages[7].level, messages[7].msg); WLog_CloseAppender(root); WLog_Uninit(); return success ? 0 : -1; }
wLog* WLog_Get(LPCSTR name) { wLog* log; if (!(log = WLog_FindChild(name))) { wLog* root = WLog_GetRoot(); if (!root) return NULL; if (!(log = WLog_New(name, root))) return NULL; if (!WLog_AddChild(root, log)) { WLog_Free(log); return NULL; } } return log; }
wLog* WLog_FindChild(LPCSTR name) { DWORD index; wLog* root; wLog* child = NULL; BOOL found = FALSE; root = WLog_GetRoot(); if (!root) return NULL; for (index = 0; index < root->ChildrenCount; index++) { child = root->Children[index]; if (strcmp(child->Name, name) == 0) { found = TRUE; break; } } return (found) ? child : NULL; }
int TestErrorSetLastError(int argc, char* argv[]) { DWORD error; HANDLE threads[4]; /* We must initialize WLog here. It will check for settings * in the environment and if the variables are not set, the last * error state is changed... */ WLog_GetRoot(); SetLastError(ERROR_ACCESS_DENIED); error = GetLastError(); if (error != ERROR_ACCESS_DENIED) { printf("GetLastError() failure: Expected: 0x%04X, Actual: 0x%04X\n", ERROR_ACCESS_DENIED, error); return -1; } pLoopCount = _aligned_malloc(sizeof(LONG), sizeof(LONG)); *pLoopCount = 0; threads[0] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) test_error_thread, (void*) (size_t) 0, 0, NULL); threads[1] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) test_error_thread, (void*) (size_t) 1, 0, NULL); threads[2] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) test_error_thread, (void*) (size_t) 2, 0, NULL); threads[3] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) test_error_thread, (void*) (size_t) 3, 0, NULL); // let the threads run for at least 2 seconds Sleep(2000); bStopTest = TRUE; WaitForSingleObject(threads[0], INFINITE); WaitForSingleObject(threads[1], INFINITE); WaitForSingleObject(threads[2], INFINITE); WaitForSingleObject(threads[3], INFINITE); CloseHandle(threads[0]); CloseHandle(threads[1]); CloseHandle(threads[2]); CloseHandle(threads[3]); error = GetLastError(); if (error != ERROR_ACCESS_DENIED) { printf("GetLastError() failure: Expected: 0x%04X, Actual: 0x%04X\n", ERROR_ACCESS_DENIED, error); return -1; } if (*pLoopCount < 4) { printf("Error: unexpected loop count\n"); return -1; } printf("Completed %d iterations.\n", *pLoopCount); return status; }
BOOL WLog_Init(void) { return WLog_GetRoot() != NULL; }
int TestWLog(int argc, char* argv[]) { wLog* root; wLog* logA; wLog* logB; wLogLayout* layout; wLogAppender* appender; char* tmp_path; char* wlog_file; if (!(tmp_path = GetKnownPath(KNOWN_PATH_TEMP))) { fprintf(stderr, "Failed to get temporary directory!\n"); return -1; } WLog_Init(); root = WLog_GetRoot(); WLog_SetLogAppenderType(root, WLOG_APPENDER_BINARY); appender = WLog_GetLogAppender(root); if(!WLog_ConfigureAppender(appender, "outputfilename", "test_w.log")) return 1; if(!WLog_ConfigureAppender(appender, "outputfilepath", tmp_path)) return 1; layout = WLog_GetLogLayout(root); WLog_Layout_SetPrefixFormat(root, layout, "[%lv:%mn] [%fl|%fn|%ln] - "); WLog_OpenAppender(root); logA = WLog_Get("com.test.ChannelA"); logB = WLog_Get("com.test.ChannelB"); WLog_SetLogLevel(logA, WLOG_INFO); WLog_SetLogLevel(logB, WLOG_ERROR); WLog_Print(logA, WLOG_INFO, "this is a test"); WLog_Print(logA, WLOG_WARN, "this is a %dnd %s", 2, "test"); WLog_Print(logA, WLOG_ERROR, "this is an error"); WLog_Print(logA, WLOG_TRACE, "this is a trace output"); WLog_Print(logB, WLOG_INFO, "just some info"); WLog_Print(logB, WLOG_WARN, "we're warning a %dnd %s", 2, "time"); WLog_Print(logB, WLOG_ERROR, "we've got an error"); WLog_Print(logB, WLOG_TRACE, "leaving a trace behind"); WLog_CloseAppender(root); WLog_Uninit(); if ((wlog_file = GetCombinedPath(tmp_path, "test_w.log"))) { DeleteFileA(wlog_file); free(wlog_file); } return 0; }