Take in account @bmiklautz remarks

* I have added a function to set the journal identifier
* the appender name has been changed from SYSTEMD to JOURNALD
This commit is contained in:
David FORT 2015-11-01 21:34:03 +01:00
parent e3915b66b7
commit 2a8de84342
4 changed files with 45 additions and 22 deletions

View File

@ -205,14 +205,13 @@ struct _wLogSyslogAppender
};
typedef struct _wLogSyslogAppender wLogSyslogAppender;
#ifdef HAVE_JOURNALD_H
struct _wLogJournaldAppender
{
WLOG_APPENDER_COMMON();
char *identifier;
FILE *stream;
};
typedef struct _wLogJournaldAppender wLogJournaldAppender;
#endif
/**

View File

@ -35,12 +35,42 @@
#include "wlog/Message.h"
#include "wlog/JournaldAppender.h"
BOOL Wlog_JournaldAppender_SetIdentifier(wLogJournaldAppender* appender, const char *id)
{
if (appender->identifier)
free(appender->identifier);
if (appender->stream)
{
fclose(appender->stream);
appender->stream = NULL;
}
return ((appender->identifier = _strdup(id)) != NULL);
}
static BOOL WLog_JournaldAppender_Open(wLog* log, wLogJournaldAppender* appender)
{
int fd;
if (!log || !appender)
return FALSE;
if (appender->stream)
return TRUE;
fd = sd_journal_stream_fd(appender->identifier, LOG_INFO, 1);
if (fd < 0)
return FALSE;
appender->stream = fdopen(fd, "w");
if (!appender->stream)
{
close(fd);
return FALSE;
}
setbuffer(appender->stream, NULL, 0);
return TRUE;
}
@ -109,9 +139,7 @@ wLogJournaldAppender* WLog_JournaldAppender_New(wLog* log)
{
wLogJournaldAppender* appender;
DWORD nSize;
LPSTR env = NULL;
LPCSTR name;
int fd;
appender = (wLogJournaldAppender*) calloc(1, sizeof(wLogJournaldAppender));
if (!appender)
@ -132,32 +160,26 @@ wLogJournaldAppender* WLog_JournaldAppender_New(wLog* log)
nSize = GetEnvironmentVariableA(name, NULL, 0);
if (nSize)
{
env = (LPSTR) malloc(nSize);
if (!env)
appender->identifier = (LPSTR) malloc(nSize);
if (!appender->identifier)
goto error_env_malloc;
GetEnvironmentVariableA(name, env, nSize);
GetEnvironmentVariableA(name, appender->identifier, nSize);
if (!WLog_JournaldAppender_Open(log, appender))
goto error_open;
}
else
{
env = _strdup("winpr");
appender->identifier = _strdup("winpr");
if (!appender->identifier)
goto error_env_malloc;
}
fd = sd_journal_stream_fd(env, LOG_INFO, 1);
if (fd < 0)
goto error_journal_fd;
appender->stream = fdopen(fd, "w");
if (!appender->stream)
goto error_stream_open;
setbuffer(appender->stream, NULL, 0);
free(env);
return appender;
error_stream_open:
close(fd);
error_journal_fd:
free(env);
error_open:
free(appender->identifier);
error_env_malloc:
free(appender);
return NULL;
@ -169,6 +191,7 @@ void WLog_JournaldAppender_Free(wLog* log, wLogJournaldAppender* appender)
{
if (appender->stream)
fclose(appender->stream);
free(appender->identifier);
free(appender);
}
}

View File

@ -30,6 +30,7 @@
WINPR_API wLogJournaldAppender* WLog_JournaldAppender_New(wLog* log);
WINPR_API void WLog_JournaldAppender_Free(wLog* log, wLogJournaldAppender* appender);
WINPR_API BOOL Wlog_JournaldAppender_SetIdentifier(wLogJournaldAppender* appender, const char *id);
#endif /* WINPR_LIBWINPR_UTILS_WLOG_JOURNALDAPPENDER_H_ */

View File

@ -703,7 +703,7 @@ wLog* WLog_GetRoot()
logAppenderType = WLOG_APPENDER_SYSLOG;
#endif /* HAVE_SYSLOG_H */
#ifdef HAVE_JOURNALD_H
else if (_stricmp(env, "SYSTEMD") == 0)
else if (_stricmp(env, "JOURNALD") == 0)
logAppenderType = WLOG_APPENDER_JOURNALD;
#endif