Commit d249a001 authored by Greg Williams's avatar Greg Williams
Browse files

Changed logger to use zlog for in-memory buffered logging to reduce overhead of logging operations

parent c4fcc190
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ LIB_DIR = ./src/lib
VENDOR = ./vendor
PROTOBUFC = $(VENDOR)/protobuf-c
SOCKET99 = $(VENDOR)/socket99
ZLOG = $(VENDOR)/zlog
VERSION_FILE = ./VERSION
VERSION = ${shell head -n1 $(VERSION_FILE)}

@@ -33,7 +34,7 @@ KINETIC_LIB = $(BIN_DIR)/lib$(KINETIC_LIB_NAME).a
LIB_INCS = -I$(LIB_DIR) -I$(PUB_INC) -I$(PROTOBUFC) -I$(VENDOR)
LIB_DEPS = $(PUB_INC)/kinetic_client.h $(PUB_INC)/byte_array.h $(PUB_INC)/kinetic_types.h $(LIB_DIR)/kinetic_connection.h $(LIB_DIR)/kinetic_hmac.h $(LIB_DIR)/kinetic_logger.h $(LIB_DIR)/kinetic_message.h $(LIB_DIR)/kinetic_nbo.h $(LIB_DIR)/kinetic_operation.h $(LIB_DIR)/kinetic_pdu.h $(LIB_DIR)/kinetic_proto.h $(LIB_DIR)/kinetic_socket.h $(LIB_DIR)/kinetic_types_internal.h
# LIB_OBJ = $(patsubst %,$(OUT_DIR)/%,$(LIB_OBJS))
LIB_OBJS = $(OUT_DIR)/kinetic_allocator.o $(OUT_DIR)/kinetic_nbo.o $(OUT_DIR)/kinetic_operation.o $(OUT_DIR)/kinetic_pdu.o $(OUT_DIR)/kinetic_proto.o $(OUT_DIR)/kinetic_socket.o $(OUT_DIR)/kinetic_message.o $(OUT_DIR)/kinetic_logger.o $(OUT_DIR)/kinetic_hmac.o $(OUT_DIR)/kinetic_connection.o $(OUT_DIR)/kinetic_types.o $(OUT_DIR)/kinetic_types_internal.o $(OUT_DIR)/byte_array.o $(OUT_DIR)/kinetic_client.o $(OUT_DIR)/socket99.o $(OUT_DIR)/protobuf-c.o
LIB_OBJS = $(OUT_DIR)/kinetic_allocator.o $(OUT_DIR)/kinetic_nbo.o $(OUT_DIR)/kinetic_operation.o $(OUT_DIR)/kinetic_pdu.o $(OUT_DIR)/kinetic_proto.o $(OUT_DIR)/kinetic_socket.o $(OUT_DIR)/kinetic_message.o $(OUT_DIR)/kinetic_logger.o $(OUT_DIR)/kinetic_hmac.o $(OUT_DIR)/kinetic_connection.o $(OUT_DIR)/kinetic_types.o $(OUT_DIR)/kinetic_types_internal.o $(OUT_DIR)/byte_array.o $(OUT_DIR)/kinetic_client.o $(OUT_DIR)/socket99.o $(OUT_DIR)/protobuf-c.o $(OUT_DIR)/zlog.o
KINETIC_LIB_OTHER_DEPS = Makefile Rakefile $(VERSION_FILE)

default: $(KINETIC_LIB)
@@ -82,6 +83,8 @@ $(OUT_DIR)/kinetic_types.o: $(LIB_DIR)/kinetic_types.c $(LIB_DEPS)
	$(CC) -c -o $@ $< $(CFLAGS) $(LIB_INCS)
$(OUT_DIR)/byte_array.o: $(LIB_DIR)/byte_array.c $(LIB_DEPS)
	$(CC) -c -o $@ $< $(CFLAGS) $(LIB_INCS)
$(OUT_DIR)/zlog.o: $(ZLOG)/zlog.c $(ZLOG)/zlog.h $(ZLOG)/zlog-config.h
	$(CC) -c -o $@ $< $(CFLAGS) -I$(ZLOG)
$(OUT_DIR)/socket99.o: $(SOCKET99)/socket99.c $(SOCKET99)/socket99.h
	$(CC) -c -o $@ $< $(CFLAGS) -I$(SOCKET99)
$(OUT_DIR)/protobuf-c.o: $(PROTOBUFC)/protobuf-c/protobuf-c.c $(PROTOBUFC)/protobuf-c/protobuf-c.h
+5 −0
Original line number Diff line number Diff line
@@ -30,6 +30,11 @@
 */
void KineticClient_Init(const char* logFile);

/**
 * @brief Performs shutdown/cleanup of the kinetic-c client lib
 */
void KineticClient_Shutdown(void);

/**
 * @brief Initializes the Kinetic API, configures logging destination, establishes a
 * connection to the specified Kinetic Device, and establishes a session.
+1 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@
    - src/utility/**
    - vendor/protobuf-c/protobuf-c/protobuf-c.c
    - vendor/socket99/socket99.c
    - vendor/zlog/zlog.c
  :include:
    - src/**
    - include/**
+5 −0
Original line number Diff line number Diff line
@@ -87,6 +87,11 @@ void KineticClient_Init(const char* logFile)
    KineticLogger_Init(logFile);
}

void KineticClient_Shutdown(void)
{
    KineticLogger_Close();
}

KineticStatus KineticClient_Connect(const KineticSession* config,
                                    KineticSessionHandle* handle)
{
+41 −46
Original line number Diff line number Diff line
@@ -19,49 +19,43 @@
*/

#include "kinetic_logger.h"
// #include "zlog/zlog.h"
#include "zlog/zlog.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

static char LogFile[256] = "";
bool LogToConsole = true;
int LogLevel = 0;
FILE* FileDesc = NULL;
int LogLevel = -1;

void KineticLogger_Init(const char* logFile)
{
    LogToConsole = true;
    FileDesc = NULL;
    LogLevel = 0;

    if (logFile != NULL) {
        strcpy(LogFile, logFile);
        if (strcmp(logFile, "NONE") == 0) {
    if (logFile == NULL) {
        LogLevel = -1;
            LogToConsole = false;
        printf("\nLogging kinetic-c output is disabled!\n");
        return;
    }
    else {
            FileDesc = fopen(LogFile, "w");
            if (FileDesc == NULL) {
                fprintf(stderr, "Failed to initialize logger with file: "
                        "fopen('%s') => FileDesc=%zd\n", logFile, (size_t)FileDesc);
        LogLevel = 0;
        
        if (strncmp(logFile, "stdout", 4) == 0 || strncmp(logFile, "STDOUT", 4) == 0) {
            printf("\nLogging kinetic-c output to console (stdout)\n");
            zlog_init_stdout();
        }
        else {
                fprintf(stderr, "Logging output to %s\n", logFile);
                LogToConsole = false;
            }
            zlog_init(logFile);
            printf("\nLogging kinetic-c output to %s\n", logFile);
        }

        // Create flushing thread to periodically flush the log
        zlogf("\n");
        zlog_init_flush_thread();
        zlogf("\n");
    }
}

void KineticLogger_Close(void)
{
    // Don't close std/already-opened streams
    if (!LogToConsole && strlen(LogFile) > 0 &&
        FileDesc != stdout && FileDesc != stderr && FileDesc != stdin) {
        fclose(FileDesc);
    if (LogLevel >= 0) {
        zlog_finish();
    }
}

@@ -70,33 +64,34 @@ void KineticLogger_Log(const char* message)
    if (message == NULL || LogLevel < 0) {
        return;
    }
    zlogf(message);
    zlogf("\n");
}

    FileDesc = LogToConsole ? stderr : fopen(LogFile, "a");
    if (FileDesc != NULL) {
        fprintf(FileDesc, "%s\n", message);
        fflush(FileDesc);
void KineticLogger_LogPrintf(const char* format, ...)
{
    if (LogLevel < 0 || format == NULL) {
        return;
    }
    char buffer[128];
    va_list arg_ptr;
    va_start(arg_ptr, format);
    vsnprintf(buffer, sizeof(buffer), format, arg_ptr);
    va_end(arg_ptr);
    strcat(buffer, "\n");
    zlogf(buffer);
}

int KineticLogger_LogPrintf(const char* format, ...)
void KineticLogger_LogLocation(char* filename, int line, char const * format, ...)
{
    int result = -1;

    if (LogLevel >= 0) {
        if (format != NULL) {
        va_list arg_ptr;
            char buffer[1024];
        va_start(arg_ptr, format);
            result = vsprintf(buffer, format, arg_ptr);
            KineticLogger_Log(buffer);
        zlogf("[@%s:%d] %s\n", filename, line, format, arg_ptr);
        va_end(arg_ptr);
    }
}

    return (result);
}


void KineticLogger_LogHeader(const KineticPDUHeader* header)
{
    if (LogLevel < 0) {
Loading