mirror of
https://github.com/morgan9e/FreeRDP
synced 2026-04-14 00:14:11 +09:00
Merge pull request #11989 from akallabeth/wlog-fixes
[winpr,utils] improve WLog logging
This commit is contained in:
@@ -203,7 +203,8 @@ static const struct x11_key_scancode_t XKB_KEY_NAME_SCANCODE_TABLE[] = {
|
||||
{ "RWIN", RDP_SCANCODE_RWIN }, /* 134: RWIN [Super_R] */
|
||||
{ "COMP", RDP_SCANCODE_APPS }, /* 135: COMP [Menu] */
|
||||
{ "STOP", RDP_SCANCODE_BROWSER_STOP }, /* 136: STOP [Cancel] */
|
||||
{ "AGAI", RDP_SCANCODE_UNKNOWN }, /* 137: AGAI [Redo] */
|
||||
{ "AGAI" /* codespell:ignore */, RDP_SCANCODE_UNKNOWN },
|
||||
/* 137: AGAI [Redo] */ /* codespell:ignore */
|
||||
{ "PROP", RDP_SCANCODE_UNKNOWN }, /* 138: PROP [SunProps] */
|
||||
{ "UNDO", RDP_SCANCODE_UNKNOWN }, /* 139: UNDO [Undo] */
|
||||
{ "FRNT", RDP_SCANCODE_UNKNOWN }, /* 140: FRNT [SunFront] */
|
||||
|
||||
@@ -1064,7 +1064,7 @@ static BOOL arm_handle_bad_request(rdpArm* arm, const HttpResponse* response, BO
|
||||
http_response_log_error_status(WLog_Get(TAG), WLOG_ERROR, response);
|
||||
|
||||
const size_t len = http_response_get_body_length(response);
|
||||
const char* msg = (const char*)http_response_get_body(response);
|
||||
const char* msg = http_response_get_body(response);
|
||||
if (msg && (strnlen(msg, len + 1) > len))
|
||||
{
|
||||
WLog_Print(arm->log, WLOG_ERROR, "Got HTTP Response data, but length is invalid");
|
||||
|
||||
@@ -176,7 +176,8 @@ static const XKB_KEY_NAME_SCANCODE XKB_KEY_NAME_SCANCODE_TABLE[] = {
|
||||
{ "RWIN", RDP_SCANCODE_RWIN }, /* 134: RWIN [Super_R] */
|
||||
{ "COMP", RDP_SCANCODE_APPS }, /* 135: COMP [Menu] */
|
||||
{ "STOP", RDP_SCANCODE_BROWSER_STOP }, /* 136: STOP [Cancel] */
|
||||
{ "AGAI", RDP_SCANCODE_UNKNOWN }, /* 137: AGAI [Redo] */
|
||||
{ "AGAI" /* codespell:ignore */, RDP_SCANCODE_UNKNOWN },
|
||||
/* 137: AGAI [Redo] */ /* codespell:ignore */
|
||||
{ "PROP", RDP_SCANCODE_UNKNOWN }, /* 138: PROP [SunProps] */
|
||||
{ "UNDO", RDP_SCANCODE_UNKNOWN }, /* 139: UNDO [Undo] */
|
||||
{ "FRNT", RDP_SCANCODE_UNKNOWN }, /* 140: FRNT [SunFront] */
|
||||
|
||||
@@ -26,3 +26,5 @@ manuel
|
||||
shs
|
||||
udo
|
||||
wheight
|
||||
emac
|
||||
leadin
|
||||
|
||||
@@ -698,35 +698,36 @@ static DWORD KEYCODE_TO_VKCODE_XKB[256] = {
|
||||
VK_SNAPSHOT | KBDEXT, /* <PRSC> 107 */
|
||||
VK_RMENU | KBDEXT, /* <RALT> <ALGR> 108 */
|
||||
#endif
|
||||
0, /* <LNFD> KEY_LINEFEED 109 */
|
||||
VK_HOME | KBDEXT, /* <HOME> 110 */
|
||||
VK_UP | KBDEXT, /* <UP> 111 */
|
||||
VK_PRIOR | KBDEXT, /* <PGUP> 112 */
|
||||
VK_LEFT | KBDEXT, /* <LEFT> 113 */
|
||||
VK_RIGHT | KBDEXT, /* <RGHT> 114 */
|
||||
VK_END | KBDEXT, /* <END> 115 */
|
||||
VK_DOWN | KBDEXT, /* <DOWN> 116 */
|
||||
VK_NEXT | KBDEXT, /* <PGDN> 117 */
|
||||
VK_INSERT | KBDEXT, /* <INS> 118 */
|
||||
VK_DELETE | KBDEXT, /* <DELE> 119 */
|
||||
0, /* <I120> KEY_MACRO 120 */
|
||||
VK_VOLUME_MUTE | KBDEXT, /* <MUTE> 121 */
|
||||
VK_VOLUME_DOWN | KBDEXT, /* <VOL-> 122 */
|
||||
VK_VOLUME_UP | KBDEXT, /* <VOL+> 123 */
|
||||
0, /* <POWR> 124 */
|
||||
0, /* <KPEQ> 125 */
|
||||
0, /* <I126> KEY_KPPLUSMINUS 126 */
|
||||
VK_PAUSE | KBDEXT, /* <PAUS> 127 */
|
||||
0, /* <I128> KEY_SCALE 128 */
|
||||
VK_ABNT_C2, /* <I129> <KPPT> KEY_KPCOMMA 129 */
|
||||
VK_HANGUL, /* <HNGL> 130 */
|
||||
VK_HANJA, /* <HJCV> 131 */
|
||||
VK_OEM_8, /* <AE13> 132 */
|
||||
VK_LWIN | KBDEXT, /* <LWIN> <LMTA> 133 */
|
||||
VK_RWIN | KBDEXT, /* <RWIN> <RMTA> 134 */
|
||||
VK_APPS | KBDEXT, /* <COMP> <MENU> 135 */
|
||||
0, /* <STOP> 136 */
|
||||
0, /* <AGAI> 137 */
|
||||
0, /* <LNFD> KEY_LINEFEED 109 */
|
||||
VK_HOME | KBDEXT, /* <HOME> 110 */
|
||||
VK_UP | KBDEXT, /* <UP> 111 */
|
||||
VK_PRIOR | KBDEXT, /* <PGUP> 112 */
|
||||
VK_LEFT | KBDEXT, /* <LEFT> 113 */
|
||||
VK_RIGHT | KBDEXT, /* <RGHT> 114 */
|
||||
VK_END | KBDEXT, /* <END> 115 */
|
||||
VK_DOWN | KBDEXT, /* <DOWN> 116 */
|
||||
VK_NEXT | KBDEXT, /* <PGDN> 117 */
|
||||
VK_INSERT | KBDEXT, /* <INS> 118 */
|
||||
VK_DELETE | KBDEXT, /* <DELE> 119 */
|
||||
0, /* <I120> KEY_MACRO 120 */
|
||||
VK_VOLUME_MUTE | KBDEXT, /* <MUTE> 121 */
|
||||
VK_VOLUME_DOWN | KBDEXT, /* <VOL-> 122 */
|
||||
VK_VOLUME_UP | KBDEXT, /* <VOL+> 123 */
|
||||
0, /* <POWR> 124 */
|
||||
0, /* <KPEQ> 125 */
|
||||
0, /* <I126> KEY_KPPLUSMINUS 126 */
|
||||
VK_PAUSE | KBDEXT, /* <PAUS> 127 */
|
||||
0, /* <I128> KEY_SCALE 128 */
|
||||
VK_ABNT_C2, /* <I129> <KPPT> KEY_KPCOMMA 129 */
|
||||
VK_HANGUL, /* <HNGL> 130 */
|
||||
VK_HANJA, /* <HJCV> 131 */
|
||||
VK_OEM_8, /* <AE13> 132 */
|
||||
VK_LWIN | KBDEXT, /* <LWIN> <LMTA> 133 */
|
||||
VK_RWIN | KBDEXT, /* <RWIN> <RMTA> 134 */
|
||||
VK_APPS | KBDEXT, /* <COMP> <MENU> 135 */
|
||||
0, /* <STOP> 136 */
|
||||
0,
|
||||
/* <AGAI> 137 */ // codespell:ignore
|
||||
0, /* <PROP> 138 */
|
||||
0, /* <UNDO> 139 */
|
||||
0, /* <FRNT> 140 */
|
||||
|
||||
@@ -96,7 +96,7 @@ endif()
|
||||
|
||||
find_package(libsystemd)
|
||||
option(WITH_SYSTEMD "allows to export wLog to systemd journal" ${libsystemd_FOUND})
|
||||
if(WITH_LIBSYSTEMD)
|
||||
if(WITH_SYSTEMD)
|
||||
find_package(libsystemd REQUIRED)
|
||||
winpr_pc_add_requires_private("libsystemd")
|
||||
set(WINPR_HAVE_JOURNALD_H TRUE)
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
#include "wlog.h"
|
||||
|
||||
void WLog_Appender_Free(wLog* log, wLogAppender* appender);
|
||||
WINPR_LOCAL void WLog_Appender_Free(wLog* log, wLogAppender* appender);
|
||||
|
||||
#include "FileAppender.h"
|
||||
#include "ConsoleAppender.h"
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
|
||||
typedef struct
|
||||
{
|
||||
WLOG_APPENDER_COMMON();
|
||||
wLogAppender common;
|
||||
|
||||
char* FileName;
|
||||
char* FilePath;
|
||||
@@ -104,7 +104,7 @@ static BOOL WLog_BinaryAppender_Close(WINPR_ATTR_UNUSED wLog* log, wLogAppender*
|
||||
}
|
||||
|
||||
static BOOL WLog_BinaryAppender_WriteMessage(wLog* log, wLogAppender* appender,
|
||||
wLogMessage* message)
|
||||
const wLogMessage* message)
|
||||
{
|
||||
FILE* fp = NULL;
|
||||
wStream* s = NULL;
|
||||
@@ -169,14 +169,14 @@ static BOOL WLog_BinaryAppender_WriteMessage(wLog* log, wLogAppender* appender,
|
||||
|
||||
static BOOL WLog_BinaryAppender_WriteDataMessage(WINPR_ATTR_UNUSED wLog* log,
|
||||
WINPR_ATTR_UNUSED wLogAppender* appender,
|
||||
WINPR_ATTR_UNUSED wLogMessage* message)
|
||||
WINPR_ATTR_UNUSED const wLogMessage* message)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static BOOL WLog_BinaryAppender_WriteImageMessage(WINPR_ATTR_UNUSED wLog* log,
|
||||
WINPR_ATTR_UNUSED wLogAppender* appender,
|
||||
WINPR_ATTR_UNUSED wLogMessage* message)
|
||||
WINPR_ATTR_UNUSED const wLogMessage* message)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
@@ -222,20 +222,18 @@ static void WLog_BinaryAppender_Free(wLogAppender* appender)
|
||||
|
||||
wLogAppender* WLog_BinaryAppender_New(WINPR_ATTR_UNUSED wLog* log)
|
||||
{
|
||||
wLogBinaryAppender* BinaryAppender = NULL;
|
||||
|
||||
BinaryAppender = (wLogBinaryAppender*)calloc(1, sizeof(wLogBinaryAppender));
|
||||
wLogBinaryAppender* BinaryAppender = (wLogBinaryAppender*)calloc(1, sizeof(wLogBinaryAppender));
|
||||
if (!BinaryAppender)
|
||||
return NULL;
|
||||
|
||||
BinaryAppender->Type = WLOG_APPENDER_BINARY;
|
||||
BinaryAppender->Open = WLog_BinaryAppender_Open;
|
||||
BinaryAppender->Close = WLog_BinaryAppender_Close;
|
||||
BinaryAppender->WriteMessage = WLog_BinaryAppender_WriteMessage;
|
||||
BinaryAppender->WriteDataMessage = WLog_BinaryAppender_WriteDataMessage;
|
||||
BinaryAppender->WriteImageMessage = WLog_BinaryAppender_WriteImageMessage;
|
||||
BinaryAppender->Free = WLog_BinaryAppender_Free;
|
||||
BinaryAppender->Set = WLog_BinaryAppender_Set;
|
||||
BinaryAppender->common.Type = WLOG_APPENDER_BINARY;
|
||||
BinaryAppender->common.Open = WLog_BinaryAppender_Open;
|
||||
BinaryAppender->common.Close = WLog_BinaryAppender_Close;
|
||||
BinaryAppender->common.WriteMessage = WLog_BinaryAppender_WriteMessage;
|
||||
BinaryAppender->common.WriteDataMessage = WLog_BinaryAppender_WriteDataMessage;
|
||||
BinaryAppender->common.WriteImageMessage = WLog_BinaryAppender_WriteImageMessage;
|
||||
BinaryAppender->common.Free = WLog_BinaryAppender_Free;
|
||||
BinaryAppender->common.Set = WLog_BinaryAppender_Set;
|
||||
|
||||
return (wLogAppender*)BinaryAppender;
|
||||
return &BinaryAppender->common;
|
||||
}
|
||||
|
||||
@@ -23,6 +23,6 @@
|
||||
#include "wlog.h"
|
||||
|
||||
WINPR_ATTR_MALLOC(WLog_Appender_Free, 2)
|
||||
wLogAppender* WLog_BinaryAppender_New(wLog* log);
|
||||
WINPR_LOCAL wLogAppender* WLog_BinaryAppender_New(wLog* log);
|
||||
|
||||
#endif /* WINPR_WLOG_BINARY_APPENDER_PRIVATE_H */
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
typedef struct
|
||||
{
|
||||
WLOG_APPENDER_COMMON();
|
||||
wLogAppender common;
|
||||
|
||||
wLogCallbacks* callbacks;
|
||||
} wLogCallbackAppender;
|
||||
@@ -41,78 +41,85 @@ static BOOL WLog_CallbackAppender_Close(WINPR_ATTR_UNUSED wLog* log,
|
||||
}
|
||||
|
||||
static BOOL WLog_CallbackAppender_WriteMessage(wLog* log, wLogAppender* appender,
|
||||
wLogMessage* message)
|
||||
const wLogMessage* cmessage)
|
||||
{
|
||||
char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
|
||||
wLogCallbackAppender* callbackAppender = NULL;
|
||||
|
||||
WINPR_ASSERT(cmessage);
|
||||
if (!appender)
|
||||
return FALSE;
|
||||
|
||||
message->PrefixString = prefix;
|
||||
WLog_Layout_GetMessagePrefix(log, appender->Layout, message);
|
||||
char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
|
||||
WLog_Layout_GetMessagePrefix(log, appender->Layout, cmessage, prefix, sizeof(prefix));
|
||||
|
||||
callbackAppender = (wLogCallbackAppender*)appender;
|
||||
wLogCallbackAppender* callbackAppender = (wLogCallbackAppender*)appender;
|
||||
|
||||
if (callbackAppender->callbacks && callbackAppender->callbacks->message)
|
||||
return callbackAppender->callbacks->message(message);
|
||||
{
|
||||
wLogMessage message = *cmessage;
|
||||
message.PrefixString = prefix;
|
||||
return callbackAppender->callbacks->message(&message);
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static BOOL WLog_CallbackAppender_WriteDataMessage(wLog* log, wLogAppender* appender,
|
||||
wLogMessage* message)
|
||||
const wLogMessage* cmessage)
|
||||
{
|
||||
char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
|
||||
wLogCallbackAppender* callbackAppender = NULL;
|
||||
|
||||
if (!appender)
|
||||
return FALSE;
|
||||
|
||||
message->PrefixString = prefix;
|
||||
WLog_Layout_GetMessagePrefix(log, appender->Layout, message);
|
||||
char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
|
||||
WLog_Layout_GetMessagePrefix(log, appender->Layout, cmessage, prefix, sizeof(prefix));
|
||||
|
||||
callbackAppender = (wLogCallbackAppender*)appender;
|
||||
wLogCallbackAppender* callbackAppender = (wLogCallbackAppender*)appender;
|
||||
if (callbackAppender->callbacks && callbackAppender->callbacks->data)
|
||||
return callbackAppender->callbacks->data(message);
|
||||
{
|
||||
wLogMessage message = *cmessage;
|
||||
message.PrefixString = prefix;
|
||||
return callbackAppender->callbacks->data(&message);
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static BOOL WLog_CallbackAppender_WriteImageMessage(wLog* log, wLogAppender* appender,
|
||||
wLogMessage* message)
|
||||
const wLogMessage* cmessage)
|
||||
{
|
||||
char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
|
||||
wLogCallbackAppender* callbackAppender = NULL;
|
||||
|
||||
WINPR_ASSERT(cmessage);
|
||||
if (!appender)
|
||||
return FALSE;
|
||||
|
||||
message->PrefixString = prefix;
|
||||
WLog_Layout_GetMessagePrefix(log, appender->Layout, message);
|
||||
char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
|
||||
WLog_Layout_GetMessagePrefix(log, appender->Layout, cmessage, prefix, sizeof(prefix));
|
||||
|
||||
callbackAppender = (wLogCallbackAppender*)appender;
|
||||
wLogCallbackAppender* callbackAppender = (wLogCallbackAppender*)appender;
|
||||
if (callbackAppender->callbacks && callbackAppender->callbacks->image)
|
||||
return callbackAppender->callbacks->image(message);
|
||||
{
|
||||
wLogMessage message = *cmessage;
|
||||
message.PrefixString = prefix;
|
||||
return callbackAppender->callbacks->image(&message);
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static BOOL WLog_CallbackAppender_WritePacketMessage(wLog* log, wLogAppender* appender,
|
||||
wLogMessage* message)
|
||||
const wLogMessage* cmessage)
|
||||
{
|
||||
char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
|
||||
wLogCallbackAppender* callbackAppender = NULL;
|
||||
|
||||
WINPR_ASSERT(cmessage);
|
||||
if (!appender)
|
||||
return FALSE;
|
||||
|
||||
message->PrefixString = prefix;
|
||||
WLog_Layout_GetMessagePrefix(log, appender->Layout, message);
|
||||
char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
|
||||
WLog_Layout_GetMessagePrefix(log, appender->Layout, cmessage, prefix, sizeof(prefix));
|
||||
|
||||
callbackAppender = (wLogCallbackAppender*)appender;
|
||||
wLogCallbackAppender* callbackAppender = (wLogCallbackAppender*)appender;
|
||||
if (callbackAppender->callbacks && callbackAppender->callbacks->package)
|
||||
return callbackAppender->callbacks->package(message);
|
||||
{
|
||||
wLogMessage message = *cmessage;
|
||||
message.PrefixString = prefix;
|
||||
return callbackAppender->callbacks->package(&message);
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
@@ -149,22 +156,20 @@ static void WLog_CallbackAppender_Free(wLogAppender* appender)
|
||||
|
||||
wLogAppender* WLog_CallbackAppender_New(WINPR_ATTR_UNUSED wLog* log)
|
||||
{
|
||||
wLogCallbackAppender* CallbackAppender = NULL;
|
||||
|
||||
CallbackAppender = (wLogCallbackAppender*)calloc(1, sizeof(wLogCallbackAppender));
|
||||
wLogCallbackAppender* CallbackAppender =
|
||||
(wLogCallbackAppender*)calloc(1, sizeof(wLogCallbackAppender));
|
||||
if (!CallbackAppender)
|
||||
return NULL;
|
||||
|
||||
CallbackAppender->Type = WLOG_APPENDER_CALLBACK;
|
||||
CallbackAppender->common.Type = WLOG_APPENDER_CALLBACK;
|
||||
CallbackAppender->common.Open = WLog_CallbackAppender_Open;
|
||||
CallbackAppender->common.Close = WLog_CallbackAppender_Close;
|
||||
CallbackAppender->common.WriteMessage = WLog_CallbackAppender_WriteMessage;
|
||||
CallbackAppender->common.WriteDataMessage = WLog_CallbackAppender_WriteDataMessage;
|
||||
CallbackAppender->common.WriteImageMessage = WLog_CallbackAppender_WriteImageMessage;
|
||||
CallbackAppender->common.WritePacketMessage = WLog_CallbackAppender_WritePacketMessage;
|
||||
CallbackAppender->common.Free = WLog_CallbackAppender_Free;
|
||||
CallbackAppender->common.Set = WLog_CallbackAppender_Set;
|
||||
|
||||
CallbackAppender->Open = WLog_CallbackAppender_Open;
|
||||
CallbackAppender->Close = WLog_CallbackAppender_Close;
|
||||
CallbackAppender->WriteMessage = WLog_CallbackAppender_WriteMessage;
|
||||
CallbackAppender->WriteDataMessage = WLog_CallbackAppender_WriteDataMessage;
|
||||
CallbackAppender->WriteImageMessage = WLog_CallbackAppender_WriteImageMessage;
|
||||
CallbackAppender->WritePacketMessage = WLog_CallbackAppender_WritePacketMessage;
|
||||
CallbackAppender->Free = WLog_CallbackAppender_Free;
|
||||
CallbackAppender->Set = WLog_CallbackAppender_Set;
|
||||
|
||||
return (wLogAppender*)CallbackAppender;
|
||||
return &CallbackAppender->common;
|
||||
}
|
||||
|
||||
@@ -23,6 +23,6 @@
|
||||
#include "wlog.h"
|
||||
|
||||
WINPR_ATTR_MALLOC(WLog_Appender_Free, 2)
|
||||
wLogAppender* WLog_CallbackAppender_New(wLog* log);
|
||||
WINPR_LOCAL wLogAppender* WLog_CallbackAppender_New(wLog* log);
|
||||
|
||||
#endif /* WINPR_WLOG_CALLBACK_APPENDER_PRIVATE_H */
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
|
||||
typedef struct
|
||||
{
|
||||
WLOG_APPENDER_COMMON();
|
||||
wLogAppender common;
|
||||
|
||||
int outputStream;
|
||||
} wLogConsoleAppender;
|
||||
@@ -51,33 +51,29 @@ static BOOL WLog_ConsoleAppender_Close(WINPR_ATTR_UNUSED wLog* log,
|
||||
}
|
||||
|
||||
static BOOL WLog_ConsoleAppender_WriteMessage(wLog* log, wLogAppender* appender,
|
||||
wLogMessage* message)
|
||||
const wLogMessage* cmessage)
|
||||
{
|
||||
FILE* fp = NULL;
|
||||
char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
|
||||
wLogConsoleAppender* consoleAppender = NULL;
|
||||
if (!appender)
|
||||
return FALSE;
|
||||
|
||||
consoleAppender = (wLogConsoleAppender*)appender;
|
||||
wLogConsoleAppender* consoleAppender = (wLogConsoleAppender*)appender;
|
||||
|
||||
message->PrefixString = prefix;
|
||||
WLog_Layout_GetMessagePrefix(log, appender->Layout, message);
|
||||
char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
|
||||
WLog_Layout_GetMessagePrefix(log, appender->Layout, cmessage, prefix, sizeof(prefix));
|
||||
|
||||
#ifdef _WIN32
|
||||
if (consoleAppender->outputStream == WLOG_CONSOLE_DEBUG)
|
||||
{
|
||||
OutputDebugStringA(message->PrefixString);
|
||||
OutputDebugStringA(message->TextString);
|
||||
OutputDebugStringA(prefix);
|
||||
OutputDebugStringA(cmessage->TextString);
|
||||
OutputDebugStringA("\n");
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
#endif
|
||||
#ifdef ANDROID
|
||||
(void)fp;
|
||||
android_LogPriority level;
|
||||
switch (message->Level)
|
||||
switch (cmessage->Level)
|
||||
{
|
||||
case WLOG_TRACE:
|
||||
level = ANDROID_LOG_VERBOSE;
|
||||
@@ -106,9 +102,10 @@ static BOOL WLog_ConsoleAppender_WriteMessage(wLog* log, wLogAppender* appender,
|
||||
}
|
||||
|
||||
if (level != ANDROID_LOG_SILENT)
|
||||
__android_log_print(level, log->Name, "%s%s", message->PrefixString, message->TextString);
|
||||
__android_log_print(level, log->Name, "%s%s", prefix, cmessage->TextString);
|
||||
|
||||
#else
|
||||
FILE* fp = NULL;
|
||||
switch (consoleAppender->outputStream)
|
||||
{
|
||||
case WLOG_CONSOLE_STDOUT:
|
||||
@@ -118,7 +115,7 @@ static BOOL WLog_ConsoleAppender_WriteMessage(wLog* log, wLogAppender* appender,
|
||||
fp = stderr;
|
||||
break;
|
||||
default:
|
||||
switch (message->Level)
|
||||
switch (cmessage->Level)
|
||||
{
|
||||
case WLOG_TRACE:
|
||||
case WLOG_DEBUG:
|
||||
@@ -132,8 +129,8 @@ static BOOL WLog_ConsoleAppender_WriteMessage(wLog* log, wLogAppender* appender,
|
||||
break;
|
||||
}
|
||||
|
||||
if (message->Level != WLOG_OFF)
|
||||
(void)fprintf(fp, "%s%s\n", message->PrefixString, message->TextString);
|
||||
if (cmessage->Level != WLOG_OFF)
|
||||
(void)fprintf(fp, "%s%s\n", prefix, cmessage->TextString);
|
||||
#endif
|
||||
return TRUE;
|
||||
}
|
||||
@@ -142,7 +139,7 @@ static int g_DataId = 0;
|
||||
|
||||
static BOOL WLog_ConsoleAppender_WriteDataMessage(WINPR_ATTR_UNUSED wLog* log,
|
||||
WINPR_ATTR_UNUSED wLogAppender* appender,
|
||||
wLogMessage* message)
|
||||
const wLogMessage* message)
|
||||
{
|
||||
#if defined(ANDROID)
|
||||
return FALSE;
|
||||
@@ -165,7 +162,7 @@ static int g_ImageId = 0;
|
||||
|
||||
static BOOL WLog_ConsoleAppender_WriteImageMessage(WINPR_ATTR_UNUSED wLog* log,
|
||||
WINPR_ATTR_UNUSED wLogAppender* appender,
|
||||
wLogMessage* message)
|
||||
const wLogMessage* message)
|
||||
{
|
||||
#if defined(ANDROID)
|
||||
return FALSE;
|
||||
@@ -188,7 +185,8 @@ static BOOL WLog_ConsoleAppender_WriteImageMessage(WINPR_ATTR_UNUSED wLog* log,
|
||||
static int g_PacketId = 0;
|
||||
|
||||
static BOOL WLog_ConsoleAppender_WritePacketMessage(WINPR_ATTR_UNUSED wLog* log,
|
||||
wLogAppender* appender, wLogMessage* message)
|
||||
wLogAppender* appender,
|
||||
const wLogMessage* message)
|
||||
{
|
||||
#if defined(ANDROID)
|
||||
return FALSE;
|
||||
@@ -251,23 +249,21 @@ static void WLog_ConsoleAppender_Free(wLogAppender* appender)
|
||||
|
||||
wLogAppender* WLog_ConsoleAppender_New(WINPR_ATTR_UNUSED wLog* log)
|
||||
{
|
||||
wLogConsoleAppender* ConsoleAppender = NULL;
|
||||
|
||||
ConsoleAppender = (wLogConsoleAppender*)calloc(1, sizeof(wLogConsoleAppender));
|
||||
wLogConsoleAppender* ConsoleAppender =
|
||||
(wLogConsoleAppender*)calloc(1, sizeof(wLogConsoleAppender));
|
||||
|
||||
if (!ConsoleAppender)
|
||||
return NULL;
|
||||
|
||||
ConsoleAppender->Type = WLOG_APPENDER_CONSOLE;
|
||||
|
||||
ConsoleAppender->Open = WLog_ConsoleAppender_Open;
|
||||
ConsoleAppender->Close = WLog_ConsoleAppender_Close;
|
||||
ConsoleAppender->WriteMessage = WLog_ConsoleAppender_WriteMessage;
|
||||
ConsoleAppender->WriteDataMessage = WLog_ConsoleAppender_WriteDataMessage;
|
||||
ConsoleAppender->WriteImageMessage = WLog_ConsoleAppender_WriteImageMessage;
|
||||
ConsoleAppender->WritePacketMessage = WLog_ConsoleAppender_WritePacketMessage;
|
||||
ConsoleAppender->Set = WLog_ConsoleAppender_Set;
|
||||
ConsoleAppender->Free = WLog_ConsoleAppender_Free;
|
||||
ConsoleAppender->common.Type = WLOG_APPENDER_CONSOLE;
|
||||
ConsoleAppender->common.Open = WLog_ConsoleAppender_Open;
|
||||
ConsoleAppender->common.Close = WLog_ConsoleAppender_Close;
|
||||
ConsoleAppender->common.WriteMessage = WLog_ConsoleAppender_WriteMessage;
|
||||
ConsoleAppender->common.WriteDataMessage = WLog_ConsoleAppender_WriteDataMessage;
|
||||
ConsoleAppender->common.WriteImageMessage = WLog_ConsoleAppender_WriteImageMessage;
|
||||
ConsoleAppender->common.WritePacketMessage = WLog_ConsoleAppender_WritePacketMessage;
|
||||
ConsoleAppender->common.Set = WLog_ConsoleAppender_Set;
|
||||
ConsoleAppender->common.Free = WLog_ConsoleAppender_Free;
|
||||
|
||||
ConsoleAppender->outputStream = WLOG_CONSOLE_DEFAULT;
|
||||
|
||||
@@ -276,5 +272,5 @@ wLogAppender* WLog_ConsoleAppender_New(WINPR_ATTR_UNUSED wLog* log)
|
||||
ConsoleAppender->outputStream = WLOG_CONSOLE_DEBUG;
|
||||
#endif
|
||||
|
||||
return (wLogAppender*)ConsoleAppender;
|
||||
return &ConsoleAppender->common;
|
||||
}
|
||||
|
||||
@@ -23,6 +23,6 @@
|
||||
#include "wlog.h"
|
||||
|
||||
WINPR_ATTR_MALLOC(WLog_Appender_Free, 2)
|
||||
wLogAppender* WLog_ConsoleAppender_New(wLog* log);
|
||||
WINPR_LOCAL wLogAppender* WLog_ConsoleAppender_New(wLog* log);
|
||||
|
||||
#endif /* WINPR_WLOG_CONSOLE_APPENDER_PRIVATE_H */
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
typedef struct
|
||||
{
|
||||
WLOG_APPENDER_COMMON();
|
||||
wLogAppender common;
|
||||
|
||||
char* FileName;
|
||||
char* FilePath;
|
||||
@@ -126,24 +126,21 @@ static BOOL WLog_FileAppender_Close(wLog* log, wLogAppender* appender)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static BOOL WLog_FileAppender_WriteMessage(wLog* log, wLogAppender* appender, wLogMessage* message)
|
||||
static BOOL WLog_FileAppender_WriteMessage(wLog* log, wLogAppender* appender,
|
||||
const wLogMessage* cmessage)
|
||||
{
|
||||
FILE* fp = NULL;
|
||||
char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
|
||||
wLogFileAppender* fileAppender = NULL;
|
||||
|
||||
if (!log || !appender || !message)
|
||||
if (!log || !appender || !cmessage)
|
||||
return FALSE;
|
||||
|
||||
fileAppender = (wLogFileAppender*)appender;
|
||||
fp = fileAppender->FileDescriptor;
|
||||
wLogFileAppender* fileAppender = (wLogFileAppender*)appender;
|
||||
FILE* fp = fileAppender->FileDescriptor;
|
||||
|
||||
if (!fp)
|
||||
return FALSE;
|
||||
|
||||
message->PrefixString = prefix;
|
||||
WLog_Layout_GetMessagePrefix(log, appender->Layout, message);
|
||||
(void)fprintf(fp, "%s%s\n", message->PrefixString, message->TextString);
|
||||
char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
|
||||
WLog_Layout_GetMessagePrefix(log, appender->Layout, cmessage, prefix, sizeof(prefix));
|
||||
(void)fprintf(fp, "%s%s\n", prefix, cmessage->TextString);
|
||||
(void)fflush(fp); /* slow! */
|
||||
return TRUE;
|
||||
}
|
||||
@@ -151,7 +148,7 @@ static BOOL WLog_FileAppender_WriteMessage(wLog* log, wLogAppender* appender, wL
|
||||
static int g_DataId = 0;
|
||||
|
||||
static BOOL WLog_FileAppender_WriteDataMessage(wLog* log, wLogAppender* appender,
|
||||
wLogMessage* message)
|
||||
const wLogMessage* message)
|
||||
{
|
||||
int DataId = 0;
|
||||
char* FullFileName = NULL;
|
||||
@@ -169,7 +166,7 @@ static BOOL WLog_FileAppender_WriteDataMessage(wLog* log, wLogAppender* appender
|
||||
static int g_ImageId = 0;
|
||||
|
||||
static BOOL WLog_FileAppender_WriteImageMessage(wLog* log, wLogAppender* appender,
|
||||
wLogMessage* message)
|
||||
const wLogMessage* message)
|
||||
{
|
||||
int ImageId = 0;
|
||||
char* FullFileName = NULL;
|
||||
@@ -227,14 +224,14 @@ wLogAppender* WLog_FileAppender_New(WINPR_ATTR_UNUSED wLog* log)
|
||||
if (!FileAppender)
|
||||
return NULL;
|
||||
|
||||
FileAppender->Type = WLOG_APPENDER_FILE;
|
||||
FileAppender->Open = WLog_FileAppender_Open;
|
||||
FileAppender->Close = WLog_FileAppender_Close;
|
||||
FileAppender->WriteMessage = WLog_FileAppender_WriteMessage;
|
||||
FileAppender->WriteDataMessage = WLog_FileAppender_WriteDataMessage;
|
||||
FileAppender->WriteImageMessage = WLog_FileAppender_WriteImageMessage;
|
||||
FileAppender->Free = WLog_FileAppender_Free;
|
||||
FileAppender->Set = WLog_FileAppender_Set;
|
||||
FileAppender->common.Type = WLOG_APPENDER_FILE;
|
||||
FileAppender->common.Open = WLog_FileAppender_Open;
|
||||
FileAppender->common.Close = WLog_FileAppender_Close;
|
||||
FileAppender->common.WriteMessage = WLog_FileAppender_WriteMessage;
|
||||
FileAppender->common.WriteDataMessage = WLog_FileAppender_WriteDataMessage;
|
||||
FileAppender->common.WriteImageMessage = WLog_FileAppender_WriteImageMessage;
|
||||
FileAppender->common.Free = WLog_FileAppender_Free;
|
||||
FileAppender->common.Set = WLog_FileAppender_Set;
|
||||
name = "WLOG_FILEAPPENDER_OUTPUT_FILE_PATH";
|
||||
nSize = GetEnvironmentVariableA(name, NULL, 0);
|
||||
|
||||
|
||||
@@ -23,6 +23,6 @@
|
||||
#include "wlog.h"
|
||||
|
||||
WINPR_ATTR_MALLOC(WLog_Appender_Free, 2)
|
||||
wLogAppender* WLog_FileAppender_New(wLog* log);
|
||||
WINPR_LOCAL wLogAppender* WLog_FileAppender_New(wLog* log);
|
||||
|
||||
#endif /* WINPR_WLOG_FILE_APPENDER_PRIVATE_H */
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
typedef struct
|
||||
{
|
||||
WLOG_APPENDER_COMMON();
|
||||
wLogAppender common;
|
||||
char* identifier;
|
||||
FILE* stream;
|
||||
} wLogJournaldAppender;
|
||||
@@ -72,18 +72,15 @@ static BOOL WLog_JournaldAppender_Close(wLog* log, wLogAppender* appender)
|
||||
}
|
||||
|
||||
static BOOL WLog_JournaldAppender_WriteMessage(wLog* log, wLogAppender* appender,
|
||||
wLogMessage* message)
|
||||
const wLogMessage* cmessage)
|
||||
{
|
||||
char* formatStr = NULL;
|
||||
wLogJournaldAppender* journaldAppender = NULL;
|
||||
char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
|
||||
|
||||
if (!log || !appender || !message)
|
||||
if (!log || !appender || !cmessage)
|
||||
return FALSE;
|
||||
|
||||
journaldAppender = (wLogJournaldAppender*)appender;
|
||||
wLogJournaldAppender* journaldAppender = (wLogJournaldAppender*)appender;
|
||||
|
||||
switch (message->Level)
|
||||
const char* formatStr = NULL;
|
||||
switch (cmessage->Level)
|
||||
{
|
||||
case WLOG_TRACE:
|
||||
case WLOG_DEBUG:
|
||||
@@ -104,25 +101,25 @@ static BOOL WLog_JournaldAppender_WriteMessage(wLog* log, wLogAppender* appender
|
||||
case WLOG_OFF:
|
||||
return TRUE;
|
||||
default:
|
||||
(void)fprintf(stderr, "%s: unknown level %" PRIu32 "\n", __func__, message->Level);
|
||||
(void)fprintf(stderr, "%s: unknown level %" PRIu32 "\n", __func__, cmessage->Level);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
message->PrefixString = prefix;
|
||||
WLog_Layout_GetMessagePrefix(log, appender->Layout, message);
|
||||
char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
|
||||
WLog_Layout_GetMessagePrefix(log, appender->Layout, cmessage, prefix, sizeof(prefix));
|
||||
|
||||
if (message->Level != WLOG_OFF)
|
||||
if (cmessage->Level != WLOG_OFF)
|
||||
{
|
||||
WINPR_PRAGMA_DIAG_PUSH
|
||||
WINPR_PRAGMA_DIAG_IGNORED_FORMAT_NONLITERAL(void)
|
||||
fprintf(journaldAppender->stream, formatStr, message->PrefixString, message->TextString);
|
||||
fprintf(journaldAppender->stream, formatStr, prefix, cmessage->TextString);
|
||||
WINPR_PRAGMA_DIAG_POP
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static BOOL WLog_JournaldAppender_WriteDataMessage(wLog* log, wLogAppender* appender,
|
||||
wLogMessage* message)
|
||||
const wLogMessage* message)
|
||||
{
|
||||
if (!log || !appender || !message)
|
||||
return FALSE;
|
||||
@@ -131,7 +128,7 @@ static BOOL WLog_JournaldAppender_WriteDataMessage(wLog* log, wLogAppender* appe
|
||||
}
|
||||
|
||||
static BOOL WLog_JournaldAppender_WriteImageMessage(wLog* log, wLogAppender* appender,
|
||||
wLogMessage* message)
|
||||
const wLogMessage* message)
|
||||
{
|
||||
if (!log || !appender || !message)
|
||||
return FALSE;
|
||||
@@ -175,24 +172,22 @@ static void WLog_JournaldAppender_Free(wLogAppender* appender)
|
||||
|
||||
wLogAppender* WLog_JournaldAppender_New(wLog* log)
|
||||
{
|
||||
wLogJournaldAppender* appender = NULL;
|
||||
DWORD nSize = 0;
|
||||
LPCSTR name = "WLOG_JOURNALD_ID";
|
||||
|
||||
appender = (wLogJournaldAppender*)calloc(1, sizeof(wLogJournaldAppender));
|
||||
wLogJournaldAppender* appender = (wLogJournaldAppender*)calloc(1, sizeof(wLogJournaldAppender));
|
||||
if (!appender)
|
||||
return NULL;
|
||||
|
||||
appender->Type = WLOG_APPENDER_JOURNALD;
|
||||
appender->Open = WLog_JournaldAppender_Open;
|
||||
appender->Close = WLog_JournaldAppender_Close;
|
||||
appender->WriteMessage = WLog_JournaldAppender_WriteMessage;
|
||||
appender->WriteDataMessage = WLog_JournaldAppender_WriteDataMessage;
|
||||
appender->WriteImageMessage = WLog_JournaldAppender_WriteImageMessage;
|
||||
appender->Set = WLog_JournaldAppender_Set;
|
||||
appender->Free = WLog_JournaldAppender_Free;
|
||||
appender->common.Type = WLOG_APPENDER_JOURNALD;
|
||||
appender->common.Open = WLog_JournaldAppender_Open;
|
||||
appender->common.Close = WLog_JournaldAppender_Close;
|
||||
appender->common.WriteMessage = WLog_JournaldAppender_WriteMessage;
|
||||
appender->common.WriteDataMessage = WLog_JournaldAppender_WriteDataMessage;
|
||||
appender->common.WriteImageMessage = WLog_JournaldAppender_WriteImageMessage;
|
||||
appender->common.Set = WLog_JournaldAppender_Set;
|
||||
appender->common.Free = WLog_JournaldAppender_Free;
|
||||
|
||||
nSize = GetEnvironmentVariableA(name, NULL, 0);
|
||||
const DWORD nSize = GetEnvironmentVariableA(name, NULL, 0);
|
||||
if (nSize)
|
||||
{
|
||||
appender->identifier = (LPSTR)malloc(nSize);
|
||||
|
||||
@@ -26,6 +26,6 @@
|
||||
|
||||
#include "wlog.h"
|
||||
|
||||
wLogAppender* WLog_JournaldAppender_New(wLog* log);
|
||||
WINPR_LOCAL wLogAppender* WLog_JournaldAppender_New(wLog* log);
|
||||
|
||||
#endif /* WINPR_LIBWINPR_UTILS_WLOG_JOURNALDAPPENDER_H_ */
|
||||
|
||||
@@ -56,7 +56,12 @@ struct format_option
|
||||
const char* replace;
|
||||
size_t replacelen;
|
||||
const char* (*fkt)(void*);
|
||||
void* arg;
|
||||
union
|
||||
{
|
||||
void* pv;
|
||||
const void* cpv;
|
||||
size_t s;
|
||||
} arg;
|
||||
const char* (*ext)(const struct format_option* opt, const char* str, size_t* preplacelen,
|
||||
size_t* pskiplen);
|
||||
struct format_option_recurse* recurse;
|
||||
@@ -68,7 +73,7 @@ struct format_option_recurse
|
||||
size_t nroptions;
|
||||
wLog* log;
|
||||
wLogLayout* layout;
|
||||
wLogMessage* message;
|
||||
const wLogMessage* message;
|
||||
char buffer[WLOG_MAX_PREFIX_SIZE];
|
||||
};
|
||||
|
||||
@@ -76,20 +81,19 @@ struct format_option_recurse
|
||||
* Log Layout
|
||||
*/
|
||||
WINPR_ATTR_FORMAT_ARG(3, 0)
|
||||
static void WLog_PrintMessagePrefixVA(WINPR_ATTR_UNUSED wLog* log, wLogMessage* message,
|
||||
static void WLog_PrintMessagePrefixVA(char* prefix, size_t prefixlen,
|
||||
WINPR_FORMAT_ARG const char* format, va_list args)
|
||||
{
|
||||
WINPR_ASSERT(message);
|
||||
(void)vsnprintf(message->PrefixString, WLOG_MAX_PREFIX_SIZE - 1, format, args);
|
||||
(void)vsnprintf(prefix, prefixlen, format, args);
|
||||
}
|
||||
|
||||
WINPR_ATTR_FORMAT_ARG(3, 4)
|
||||
static void WLog_PrintMessagePrefix(wLog* log, wLogMessage* message,
|
||||
static void WLog_PrintMessagePrefix(char* prefix, size_t prefixlen,
|
||||
WINPR_FORMAT_ARG const char* format, ...)
|
||||
{
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
WLog_PrintMessagePrefixVA(log, message, format, args);
|
||||
WLog_PrintMessagePrefixVA(prefix, prefixlen, format, args);
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
@@ -158,7 +162,7 @@ static const char* skip_if_null(const struct format_option* opt, const char* fmt
|
||||
return NULL;
|
||||
*pskiplen = WINPR_ASSERTING_INT_CAST(size_t, end - fmt) + opt->replacelen;
|
||||
|
||||
if (!opt->arg)
|
||||
if (!opt->arg.cpv)
|
||||
return NULL;
|
||||
|
||||
const size_t replacelen = WINPR_ASSERTING_INT_CAST(size_t, end - str);
|
||||
@@ -192,12 +196,12 @@ static BOOL replace_format_string(const char* FormatString, struct format_option
|
||||
size_t replacelen = opt->replacelen;
|
||||
size_t fmtlen = opt->fmtlen;
|
||||
const char* replace = opt->replace;
|
||||
const void* arg = opt->arg;
|
||||
const void* arg = opt->arg.cpv;
|
||||
|
||||
if (opt->ext)
|
||||
replace = opt->ext(opt, FormatString, &replacelen, &fmtlen);
|
||||
if (opt->fkt)
|
||||
arg = opt->fkt(opt->arg);
|
||||
arg = opt->fkt(opt->arg.pv);
|
||||
|
||||
if (replace && (replacelen > 0))
|
||||
{
|
||||
@@ -231,12 +235,14 @@ static BOOL replace_format_string(const char* FormatString, struct format_option
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL WLog_Layout_GetMessagePrefix(wLog* log, wLogLayout* layout, wLogMessage* message)
|
||||
BOOL WLog_Layout_GetMessagePrefix(wLog* log, wLogLayout* layout, const wLogMessage* message,
|
||||
char* prefix, size_t prefixlen)
|
||||
{
|
||||
char format[WLOG_MAX_PREFIX_SIZE] = { 0 };
|
||||
|
||||
WINPR_ASSERT(layout);
|
||||
WINPR_ASSERT(message);
|
||||
WINPR_ASSERT(prefix);
|
||||
|
||||
struct format_tid_arg targ = { 0 };
|
||||
|
||||
@@ -249,37 +255,77 @@ BOOL WLog_Layout_GetMessagePrefix(wLog* log, wLogLayout* layout, wLogMessage* me
|
||||
|
||||
#define ENTRY(x) x, sizeof(x) - 1
|
||||
struct format_option options[] = {
|
||||
{ ENTRY("%ctx"), ENTRY("%s"), log->custom, log->context, NULL, &recurse }, /* log context */
|
||||
{ ENTRY("%dw"), ENTRY("%u"), NULL, (void*)(size_t)localTime.wDayOfWeek, NULL,
|
||||
{ ENTRY("%ctx"),
|
||||
ENTRY("%s"),
|
||||
log->custom,
|
||||
{ .pv = log->context },
|
||||
NULL,
|
||||
&recurse }, /* log context */
|
||||
{ ENTRY("%dw"),
|
||||
ENTRY("%u"),
|
||||
NULL,
|
||||
{ .s = localTime.wDayOfWeek },
|
||||
NULL,
|
||||
&recurse }, /* day of week */
|
||||
{ ENTRY("%dy"), ENTRY("%u"), NULL, (void*)(size_t)localTime.wDay, NULL,
|
||||
&recurse }, /* day of year */
|
||||
{ ENTRY("%fl"), ENTRY("%s"), NULL, WINPR_CAST_CONST_PTR_AWAY(message->FileName, void*),
|
||||
NULL, &recurse }, /* file */
|
||||
{ ENTRY("%fn"), ENTRY("%s"), NULL, WINPR_CAST_CONST_PTR_AWAY(message->FunctionName, void*),
|
||||
NULL, &recurse }, /* function */
|
||||
{ ENTRY("%hr"), ENTRY("%02u"), NULL, (void*)(size_t)localTime.wHour, NULL,
|
||||
&recurse }, /* hours */
|
||||
{ ENTRY("%ln"), ENTRY("%" PRIuz), NULL, (void*)message->LineNumber, NULL,
|
||||
{ ENTRY("%dy"), ENTRY("%u"), NULL, { .s = localTime.wDay }, NULL, &recurse }, /* day of year
|
||||
*/
|
||||
{ ENTRY("%fl"), ENTRY("%s"), NULL, { .cpv = message->FileName }, NULL, &recurse }, /* file
|
||||
*/
|
||||
{ ENTRY("%fn"),
|
||||
ENTRY("%s"),
|
||||
NULL,
|
||||
{ .cpv = message->FunctionName },
|
||||
NULL,
|
||||
&recurse }, /* function
|
||||
*/
|
||||
{ ENTRY("%hr"), ENTRY("%02u"), NULL, { .s = localTime.wHour }, NULL, &recurse }, /* hours */
|
||||
{ ENTRY("%ln"),
|
||||
ENTRY("%" PRIuz),
|
||||
NULL,
|
||||
{ .s = message->LineNumber },
|
||||
NULL,
|
||||
&recurse }, /* line number */
|
||||
{ ENTRY("%lv"), ENTRY("%s"), NULL,
|
||||
WINPR_CAST_CONST_PTR_AWAY(WLOG_LEVELS[message->Level], void*), NULL,
|
||||
{ ENTRY("%lv"),
|
||||
ENTRY("%s"),
|
||||
NULL,
|
||||
{ .cpv = WLOG_LEVELS[message->Level] },
|
||||
NULL,
|
||||
&recurse }, /* log level */
|
||||
{ ENTRY("%mi"), ENTRY("%02u"), NULL, (void*)(size_t)localTime.wMinute, NULL,
|
||||
&recurse }, /* minutes */
|
||||
{ ENTRY("%ml"), ENTRY("%03u"), NULL, (void*)(size_t)localTime.wMilliseconds, NULL,
|
||||
&recurse }, /* milliseconds */
|
||||
{ ENTRY("%mn"), ENTRY("%s"), NULL, log->Name, NULL, &recurse }, /* module name */
|
||||
{ ENTRY("%mo"), ENTRY("%u"), NULL, (void*)(size_t)localTime.wMonth, NULL,
|
||||
&recurse }, /* month */
|
||||
{ ENTRY("%pid"), ENTRY("%u"), NULL, (void*)(size_t)GetCurrentProcessId(), NULL,
|
||||
{ ENTRY("%mi"),
|
||||
ENTRY("%02u"),
|
||||
NULL,
|
||||
{ .s = localTime.wMinute },
|
||||
NULL,
|
||||
&recurse }, /* minutes
|
||||
*/
|
||||
{ ENTRY("%ml"),
|
||||
ENTRY("%03u"),
|
||||
NULL,
|
||||
{ .s = localTime.wMilliseconds },
|
||||
NULL,
|
||||
&recurse }, /* milliseconds */
|
||||
{ ENTRY("%mn"), ENTRY("%s"), NULL, { .cpv = log->Name }, NULL, &recurse }, /* module name */
|
||||
{ ENTRY("%mo"), ENTRY("%u"), NULL, { .s = localTime.wMonth }, NULL, &recurse }, /* month */
|
||||
{ ENTRY("%pid"),
|
||||
ENTRY("%u"),
|
||||
NULL,
|
||||
{ .s = GetCurrentProcessId() },
|
||||
NULL,
|
||||
&recurse }, /* process id */
|
||||
{ ENTRY("%se"), ENTRY("%02u"), NULL, (void*)(size_t)localTime.wSecond, NULL,
|
||||
&recurse }, /* seconds */
|
||||
{ ENTRY("%tid"), ENTRY("%s"), get_tid, &targ, NULL, &recurse }, /* thread id */
|
||||
{ ENTRY("%yr"), ENTRY("%u"), NULL, (void*)(size_t)localTime.wYear, NULL,
|
||||
&recurse }, /* year */
|
||||
{ ENTRY("%{"), ENTRY("%}"), NULL, log->context, skip_if_null,
|
||||
{ ENTRY("%se"),
|
||||
ENTRY("%02u"),
|
||||
NULL,
|
||||
{ .s = localTime.wSecond },
|
||||
NULL,
|
||||
&recurse }, /* seconds
|
||||
*/
|
||||
{ ENTRY("%tid"), ENTRY("%s"), get_tid, { .pv = &targ }, NULL, &recurse }, /* thread id */
|
||||
{ ENTRY("%yr"), ENTRY("%u"), NULL, { .s = localTime.wYear }, NULL, &recurse }, /* year */
|
||||
{ ENTRY("%{"),
|
||||
ENTRY("%}"),
|
||||
NULL,
|
||||
{ .pv = log->context },
|
||||
skip_if_null,
|
||||
&recurse }, /* skip if no context */
|
||||
};
|
||||
|
||||
@@ -292,7 +338,7 @@ BOOL WLog_Layout_GetMessagePrefix(wLog* log, wLogLayout* layout, wLogMessage* me
|
||||
WINPR_PRAGMA_DIAG_PUSH
|
||||
WINPR_PRAGMA_DIAG_IGNORED_FORMAT_SECURITY
|
||||
|
||||
WLog_PrintMessagePrefix(log, message, format);
|
||||
WLog_PrintMessagePrefix(prefix, prefixlen, format);
|
||||
|
||||
WINPR_PRAGMA_DIAG_POP
|
||||
|
||||
|
||||
@@ -33,9 +33,9 @@ struct s_wLogLayout
|
||||
LPSTR FormatString;
|
||||
};
|
||||
|
||||
void WLog_Layout_Free(wLog* log, wLogLayout* layout);
|
||||
WINPR_LOCAL void WLog_Layout_Free(wLog* log, wLogLayout* layout);
|
||||
|
||||
WINPR_ATTR_MALLOC(WLog_Layout_Free, 2)
|
||||
wLogLayout* WLog_Layout_New(wLog* log);
|
||||
WINPR_LOCAL wLogLayout* WLog_Layout_New(wLog* log);
|
||||
|
||||
#endif /* WINPR_WLOG_LAYOUT_PRIVATE_H */
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
typedef struct
|
||||
{
|
||||
WLOG_APPENDER_COMMON();
|
||||
wLogAppender common;
|
||||
} wLogSyslogAppender;
|
||||
|
||||
static int getSyslogLevel(DWORD level)
|
||||
@@ -66,7 +66,7 @@ static BOOL WLog_SyslogAppender_Close(wLog* log, wLogAppender* appender)
|
||||
}
|
||||
|
||||
static BOOL WLog_SyslogAppender_WriteMessage(wLog* log, wLogAppender* appender,
|
||||
wLogMessage* message)
|
||||
const wLogMessage* message)
|
||||
{
|
||||
int syslogLevel = 0;
|
||||
|
||||
@@ -81,7 +81,7 @@ static BOOL WLog_SyslogAppender_WriteMessage(wLog* log, wLogAppender* appender,
|
||||
}
|
||||
|
||||
static BOOL WLog_SyslogAppender_WriteDataMessage(wLog* log, wLogAppender* appender,
|
||||
wLogMessage* message)
|
||||
const wLogMessage* message)
|
||||
{
|
||||
int syslogLevel = 0;
|
||||
|
||||
@@ -96,7 +96,7 @@ static BOOL WLog_SyslogAppender_WriteDataMessage(wLog* log, wLogAppender* append
|
||||
}
|
||||
|
||||
static BOOL WLog_SyslogAppender_WriteImageMessage(wLog* log, wLogAppender* appender,
|
||||
wLogMessage* message)
|
||||
const wLogMessage* message)
|
||||
{
|
||||
int syslogLevel = 0;
|
||||
|
||||
@@ -118,20 +118,18 @@ static void WLog_SyslogAppender_Free(wLogAppender* appender)
|
||||
|
||||
wLogAppender* WLog_SyslogAppender_New(WINPR_ATTR_UNUSED wLog* log)
|
||||
{
|
||||
wLogSyslogAppender* appender = NULL;
|
||||
|
||||
appender = (wLogSyslogAppender*)calloc(1, sizeof(wLogSyslogAppender));
|
||||
wLogSyslogAppender* appender = (wLogSyslogAppender*)calloc(1, sizeof(wLogSyslogAppender));
|
||||
if (!appender)
|
||||
return NULL;
|
||||
|
||||
appender->Type = WLOG_APPENDER_SYSLOG;
|
||||
appender->common.Type = WLOG_APPENDER_SYSLOG;
|
||||
|
||||
appender->Open = WLog_SyslogAppender_Open;
|
||||
appender->Close = WLog_SyslogAppender_Close;
|
||||
appender->WriteMessage = WLog_SyslogAppender_WriteMessage;
|
||||
appender->WriteDataMessage = WLog_SyslogAppender_WriteDataMessage;
|
||||
appender->WriteImageMessage = WLog_SyslogAppender_WriteImageMessage;
|
||||
appender->Free = WLog_SyslogAppender_Free;
|
||||
appender->common.Open = WLog_SyslogAppender_Open;
|
||||
appender->common.Close = WLog_SyslogAppender_Close;
|
||||
appender->common.WriteMessage = WLog_SyslogAppender_WriteMessage;
|
||||
appender->common.WriteDataMessage = WLog_SyslogAppender_WriteDataMessage;
|
||||
appender->common.WriteImageMessage = WLog_SyslogAppender_WriteImageMessage;
|
||||
appender->common.Free = WLog_SyslogAppender_Free;
|
||||
|
||||
return (wLogAppender*)appender;
|
||||
return &appender->common;
|
||||
}
|
||||
|
||||
@@ -27,6 +27,6 @@
|
||||
#include "wlog.h"
|
||||
|
||||
WINPR_ATTR_MALLOC(WLog_Appender_Free, 2)
|
||||
wLogAppender* WLog_SyslogAppender_New(wLog* log);
|
||||
WINPR_LOCAL wLogAppender* WLog_SyslogAppender_New(wLog* log);
|
||||
|
||||
#endif /* WINPR_LIBWINPR_UTILS_WLOG_SYSLOGAPPENDER_H_ */
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
typedef struct
|
||||
{
|
||||
WLOG_APPENDER_COMMON();
|
||||
wLogAppender common;
|
||||
char* host;
|
||||
struct sockaddr targetAddr;
|
||||
int targetAddrLen;
|
||||
@@ -87,22 +87,21 @@ static BOOL WLog_UdpAppender_Close(wLog* log, wLogAppender* appender)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static BOOL WLog_UdpAppender_WriteMessage(wLog* log, wLogAppender* appender, wLogMessage* message)
|
||||
static BOOL WLog_UdpAppender_WriteMessage(wLog* log, wLogAppender* appender,
|
||||
const wLogMessage* cmessage)
|
||||
{
|
||||
char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
|
||||
wLogUdpAppender* udpAppender = NULL;
|
||||
|
||||
if (!log || !appender || !message)
|
||||
if (!log || !appender || !cmessage)
|
||||
return FALSE;
|
||||
|
||||
udpAppender = (wLogUdpAppender*)appender;
|
||||
message->PrefixString = prefix;
|
||||
WLog_Layout_GetMessagePrefix(log, appender->Layout, message);
|
||||
(void)_sendto(udpAppender->sock, message->PrefixString,
|
||||
(int)strnlen(message->PrefixString, INT_MAX), 0, &udpAppender->targetAddr,
|
||||
udpAppender->targetAddrLen);
|
||||
(void)_sendto(udpAppender->sock, message->TextString,
|
||||
(int)strnlen(message->TextString, INT_MAX), 0, &udpAppender->targetAddr,
|
||||
wLogUdpAppender* udpAppender = (wLogUdpAppender*)appender;
|
||||
|
||||
char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
|
||||
WLog_Layout_GetMessagePrefix(log, appender->Layout, cmessage, prefix, sizeof(prefix));
|
||||
|
||||
(void)_sendto(udpAppender->sock, prefix, (int)strnlen(prefix, ARRAYSIZE(prefix)), 0,
|
||||
&udpAppender->targetAddr, udpAppender->targetAddrLen);
|
||||
(void)_sendto(udpAppender->sock, cmessage->TextString,
|
||||
(int)strnlen(cmessage->TextString, INT_MAX), 0, &udpAppender->targetAddr,
|
||||
udpAppender->targetAddrLen);
|
||||
(void)_sendto(udpAppender->sock, "\n", 1, 0, &udpAppender->targetAddr,
|
||||
udpAppender->targetAddrLen);
|
||||
@@ -110,7 +109,7 @@ static BOOL WLog_UdpAppender_WriteMessage(wLog* log, wLogAppender* appender, wLo
|
||||
}
|
||||
|
||||
static BOOL WLog_UdpAppender_WriteDataMessage(wLog* log, wLogAppender* appender,
|
||||
wLogMessage* message)
|
||||
const wLogMessage* message)
|
||||
{
|
||||
if (!log || !appender || !message)
|
||||
return FALSE;
|
||||
@@ -119,7 +118,7 @@ static BOOL WLog_UdpAppender_WriteDataMessage(wLog* log, wLogAppender* appender,
|
||||
}
|
||||
|
||||
static BOOL WLog_UdpAppender_WriteImageMessage(wLog* log, wLogAppender* appender,
|
||||
wLogMessage* message)
|
||||
const wLogMessage* message)
|
||||
{
|
||||
if (!log || !appender || !message)
|
||||
return FALSE;
|
||||
@@ -169,22 +168,21 @@ static void WLog_UdpAppender_Free(wLogAppender* appender)
|
||||
|
||||
wLogAppender* WLog_UdpAppender_New(wLog* log)
|
||||
{
|
||||
wLogUdpAppender* appender = NULL;
|
||||
DWORD nSize = 0;
|
||||
LPCSTR name = NULL;
|
||||
appender = (wLogUdpAppender*)calloc(1, sizeof(wLogUdpAppender));
|
||||
wLogUdpAppender* appender = (wLogUdpAppender*)calloc(1, sizeof(wLogUdpAppender));
|
||||
|
||||
if (!appender)
|
||||
return NULL;
|
||||
|
||||
appender->Type = WLOG_APPENDER_UDP;
|
||||
appender->Open = WLog_UdpAppender_Open;
|
||||
appender->Close = WLog_UdpAppender_Close;
|
||||
appender->WriteMessage = WLog_UdpAppender_WriteMessage;
|
||||
appender->WriteDataMessage = WLog_UdpAppender_WriteDataMessage;
|
||||
appender->WriteImageMessage = WLog_UdpAppender_WriteImageMessage;
|
||||
appender->Free = WLog_UdpAppender_Free;
|
||||
appender->Set = WLog_UdpAppender_Set;
|
||||
appender->common.Type = WLOG_APPENDER_UDP;
|
||||
appender->common.Open = WLog_UdpAppender_Open;
|
||||
appender->common.Close = WLog_UdpAppender_Close;
|
||||
appender->common.WriteMessage = WLog_UdpAppender_WriteMessage;
|
||||
appender->common.WriteDataMessage = WLog_UdpAppender_WriteDataMessage;
|
||||
appender->common.WriteImageMessage = WLog_UdpAppender_WriteImageMessage;
|
||||
appender->common.Free = WLog_UdpAppender_Free;
|
||||
appender->common.Set = WLog_UdpAppender_Set;
|
||||
appender->sock = _socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
|
||||
|
||||
if (appender->sock == INVALID_SOCKET)
|
||||
@@ -214,7 +212,7 @@ wLogAppender* WLog_UdpAppender_New(wLog* log)
|
||||
goto error_open;
|
||||
}
|
||||
|
||||
return (wLogAppender*)appender;
|
||||
return &appender->common;
|
||||
error_open:
|
||||
free(appender->host);
|
||||
closesocket(appender->sock);
|
||||
|
||||
@@ -29,6 +29,6 @@
|
||||
#include "wlog.h"
|
||||
|
||||
WINPR_ATTR_MALLOC(WLog_Appender_Free, 2)
|
||||
wLogAppender* WLog_UdpAppender_New(wLog* log);
|
||||
WINPR_LOCAL wLogAppender* WLog_UdpAppender_New(wLog* log);
|
||||
|
||||
#endif /* WINPR_LIBWINPR_UTILS_WLOG_UDPAPPENDER_H_ */
|
||||
|
||||
@@ -38,6 +38,8 @@
|
||||
|
||||
#include "wlog.h"
|
||||
|
||||
#define WLOG_MAX_STRING_SIZE 16384
|
||||
|
||||
typedef struct
|
||||
{
|
||||
DWORD Level;
|
||||
@@ -225,11 +227,10 @@ out:
|
||||
return status;
|
||||
}
|
||||
|
||||
static BOOL WLog_Write(wLog* log, wLogMessage* message)
|
||||
static BOOL WLog_Write(wLog* log, const wLogMessage* message)
|
||||
{
|
||||
BOOL status = FALSE;
|
||||
wLogAppender* appender = NULL;
|
||||
appender = WLog_GetLogAppender(log);
|
||||
wLogAppender* appender = WLog_GetLogAppender(log);
|
||||
|
||||
if (!appender)
|
||||
return FALSE;
|
||||
@@ -256,11 +257,10 @@ static BOOL WLog_Write(wLog* log, wLogMessage* message)
|
||||
return status;
|
||||
}
|
||||
|
||||
static BOOL WLog_WriteData(wLog* log, wLogMessage* message)
|
||||
static BOOL WLog_WriteData(wLog* log, const wLogMessage* message)
|
||||
{
|
||||
BOOL status = 0;
|
||||
wLogAppender* appender = NULL;
|
||||
appender = WLog_GetLogAppender(log);
|
||||
wLogAppender* appender = WLog_GetLogAppender(log);
|
||||
|
||||
if (!appender)
|
||||
return FALSE;
|
||||
@@ -349,6 +349,24 @@ static BOOL WLog_WritePacket(wLog* log, wLogMessage* message)
|
||||
return status;
|
||||
}
|
||||
|
||||
static BOOL WLog_PrintTextMessageInternal(wLog* log, const wLogMessage* cmessage, va_list args)
|
||||
{
|
||||
assert(cmessage);
|
||||
|
||||
char formattedLogMessage[WLOG_MAX_STRING_SIZE] = { 0 };
|
||||
wLogMessage message = *cmessage;
|
||||
message.TextString = formattedLogMessage;
|
||||
|
||||
WINPR_PRAGMA_DIAG_PUSH
|
||||
WINPR_PRAGMA_DIAG_IGNORED_FORMAT_NONLITERAL
|
||||
if (vsnprintf(formattedLogMessage, ARRAYSIZE(formattedLogMessage) - 1, cmessage->FormatString,
|
||||
args) < 0)
|
||||
return FALSE;
|
||||
WINPR_PRAGMA_DIAG_POP
|
||||
|
||||
return WLog_Write(log, &message);
|
||||
}
|
||||
|
||||
BOOL WLog_PrintMessageVA(wLog* log, DWORD type, DWORD level, size_t line, const char* file,
|
||||
const char* function, va_list args)
|
||||
{
|
||||
@@ -365,26 +383,7 @@ BOOL WLog_PrintMessageVA(wLog* log, DWORD type, DWORD level, size_t line, const
|
||||
case WLOG_MESSAGE_TEXT:
|
||||
message.FormatString = va_arg(args, const char*);
|
||||
|
||||
if (!strchr(message.FormatString, '%'))
|
||||
{
|
||||
message.TextString = message.FormatString;
|
||||
status = WLog_Write(log, &message);
|
||||
}
|
||||
else
|
||||
{
|
||||
char formattedLogMessage[WLOG_MAX_STRING_SIZE] = { 0 };
|
||||
|
||||
WINPR_PRAGMA_DIAG_PUSH
|
||||
WINPR_PRAGMA_DIAG_IGNORED_FORMAT_NONLITERAL
|
||||
if (vsnprintf(formattedLogMessage, WLOG_MAX_STRING_SIZE - 1, message.FormatString,
|
||||
args) < 0)
|
||||
return FALSE;
|
||||
WINPR_PRAGMA_DIAG_POP
|
||||
|
||||
message.TextString = formattedLogMessage;
|
||||
status = WLog_Write(log, &message);
|
||||
}
|
||||
|
||||
status = WLog_PrintTextMessageInternal(log, &message, args);
|
||||
break;
|
||||
|
||||
case WLOG_MESSAGE_DATA:
|
||||
@@ -418,7 +417,6 @@ BOOL WLog_PrintMessageVA(wLog* log, DWORD type, DWORD level, size_t line, const
|
||||
BOOL WLog_PrintTextMessageVA(wLog* log, DWORD level, size_t line, const char* file,
|
||||
const char* function, const char* fmt, va_list args)
|
||||
{
|
||||
BOOL status = FALSE;
|
||||
wLogMessage message = { 0 };
|
||||
message.Type = WLOG_MESSAGE_TEXT;
|
||||
message.Level = level;
|
||||
@@ -428,27 +426,7 @@ BOOL WLog_PrintTextMessageVA(wLog* log, DWORD level, size_t line, const char* fi
|
||||
|
||||
message.FormatString = fmt;
|
||||
|
||||
if (!strchr(message.FormatString, '%'))
|
||||
{
|
||||
message.TextString = message.FormatString;
|
||||
status = WLog_Write(log, &message);
|
||||
}
|
||||
else
|
||||
{
|
||||
char formattedLogMessage[WLOG_MAX_STRING_SIZE] = { 0 };
|
||||
|
||||
WINPR_PRAGMA_DIAG_PUSH
|
||||
WINPR_PRAGMA_DIAG_IGNORED_FORMAT_NONLITERAL
|
||||
if (vsnprintf(formattedLogMessage, WLOG_MAX_STRING_SIZE - 1, message.FormatString, args) <
|
||||
0)
|
||||
return FALSE;
|
||||
WINPR_PRAGMA_DIAG_POP
|
||||
|
||||
message.TextString = formattedLogMessage;
|
||||
status = WLog_Write(log, &message);
|
||||
}
|
||||
|
||||
return status;
|
||||
return WLog_PrintTextMessageInternal(log, &message, args);
|
||||
}
|
||||
|
||||
BOOL WLog_PrintMessage(wLog* log, DWORD type, DWORD level, size_t line, const char* file,
|
||||
|
||||
@@ -23,43 +23,39 @@
|
||||
#include <winpr/wlog.h>
|
||||
|
||||
#define WLOG_MAX_PREFIX_SIZE 512
|
||||
#define WLOG_MAX_STRING_SIZE 8192
|
||||
|
||||
typedef BOOL (*WLOG_APPENDER_OPEN_FN)(wLog* log, wLogAppender* appender);
|
||||
typedef BOOL (*WLOG_APPENDER_CLOSE_FN)(wLog* log, wLogAppender* appender);
|
||||
typedef BOOL (*WLOG_APPENDER_WRITE_MESSAGE_FN)(wLog* log, wLogAppender* appender,
|
||||
wLogMessage* message);
|
||||
const wLogMessage* message);
|
||||
typedef BOOL (*WLOG_APPENDER_WRITE_DATA_MESSAGE_FN)(wLog* log, wLogAppender* appender,
|
||||
wLogMessage* message);
|
||||
const wLogMessage* message);
|
||||
typedef BOOL (*WLOG_APPENDER_WRITE_IMAGE_MESSAGE_FN)(wLog* log, wLogAppender* appender,
|
||||
wLogMessage* message);
|
||||
const wLogMessage* message);
|
||||
typedef BOOL (*WLOG_APPENDER_WRITE_PACKET_MESSAGE_FN)(wLog* log, wLogAppender* appender,
|
||||
wLogMessage* message);
|
||||
const wLogMessage* message);
|
||||
typedef BOOL (*WLOG_APPENDER_SET)(wLogAppender* appender, const char* setting, void* value);
|
||||
typedef void (*WLOG_APPENDER_FREE)(wLogAppender* appender);
|
||||
|
||||
#define WLOG_APPENDER_COMMON() \
|
||||
DWORD Type; \
|
||||
BOOL active; \
|
||||
wLogLayout* Layout; \
|
||||
CRITICAL_SECTION lock; \
|
||||
BOOL recursive; \
|
||||
void* TextMessageContext; \
|
||||
void* DataMessageContext; \
|
||||
void* ImageMessageContext; \
|
||||
void* PacketMessageContext; \
|
||||
WLOG_APPENDER_OPEN_FN Open; \
|
||||
WLOG_APPENDER_CLOSE_FN Close; \
|
||||
WLOG_APPENDER_WRITE_MESSAGE_FN WriteMessage; \
|
||||
WLOG_APPENDER_WRITE_DATA_MESSAGE_FN WriteDataMessage; \
|
||||
WLOG_APPENDER_WRITE_IMAGE_MESSAGE_FN WriteImageMessage; \
|
||||
WLOG_APPENDER_WRITE_PACKET_MESSAGE_FN WritePacketMessage; \
|
||||
WLOG_APPENDER_FREE Free; \
|
||||
WLOG_APPENDER_SET Set
|
||||
|
||||
struct s_wLogAppender
|
||||
{
|
||||
WLOG_APPENDER_COMMON();
|
||||
DWORD Type;
|
||||
BOOL active;
|
||||
wLogLayout* Layout;
|
||||
CRITICAL_SECTION lock;
|
||||
BOOL recursive;
|
||||
void* TextMessageContext;
|
||||
void* DataMessageContext;
|
||||
void* ImageMessageContext;
|
||||
void* PacketMessageContext;
|
||||
WLOG_APPENDER_OPEN_FN Open;
|
||||
WLOG_APPENDER_CLOSE_FN Close;
|
||||
WLOG_APPENDER_WRITE_MESSAGE_FN WriteMessage;
|
||||
WLOG_APPENDER_WRITE_DATA_MESSAGE_FN WriteDataMessage;
|
||||
WLOG_APPENDER_WRITE_IMAGE_MESSAGE_FN WriteImageMessage;
|
||||
WLOG_APPENDER_WRITE_PACKET_MESSAGE_FN WritePacketMessage;
|
||||
WLOG_APPENDER_FREE Free;
|
||||
WLOG_APPENDER_SET Set;
|
||||
};
|
||||
|
||||
struct s_wLog
|
||||
@@ -83,8 +79,10 @@ struct s_wLog
|
||||
void* context;
|
||||
};
|
||||
|
||||
extern const char* WLOG_LEVELS[7];
|
||||
BOOL WLog_Layout_GetMessagePrefix(wLog* log, wLogLayout* layout, wLogMessage* message);
|
||||
WINPR_LOCAL extern const char* WLOG_LEVELS[7];
|
||||
WINPR_LOCAL BOOL WLog_Layout_GetMessagePrefix(wLog* log, wLogLayout* layout,
|
||||
const wLogMessage* message, char* prefix,
|
||||
size_t prefixlen);
|
||||
|
||||
#include "Layout.h"
|
||||
#include "Appender.h"
|
||||
|
||||
Reference in New Issue
Block a user