Skip to content

Commit

Permalink
Merge pull request #14 from igorkh-fb/runtime-logging
Browse files Browse the repository at this point in the history
Support runtime plugable logging callback
  • Loading branch information
cblokh authored Dec 21, 2023
2 parents baa6cb3 + 1dd05cc commit cb64940
Show file tree
Hide file tree
Showing 4 changed files with 79 additions and 15 deletions.
41 changes: 29 additions & 12 deletions include/logging/logging_t.h
Original file line number Diff line number Diff line change
@@ -1,16 +1,33 @@
// This file can be replaced with other logging system integration
#pragma once

#ifndef LOGGING_T_H_
#define LOGGING_T_H_
typedef enum {
COSIGNER_LOG_LEVEL_FATAL = 50000,
COSIGNER_LOG_LEVEL_ERROR = 40000,
COSIGNER_LOG_LEVEL_WARN = 30000,
COSIGNER_LOG_LEVEL_INFO = 20000,
COSIGNER_LOG_LEVEL_DEBUG = 10000,
COSIGNER_LOG_LEVEL_TRACE = 5000,
} COSIGNER_LOG_LEVEL;

#include <stdio.h>
typedef void (*cosigner_log_callback)(int level, const char* file, int line, const char* func, const char* message, void* userp);

#define LOG(level, message, ...) do {printf((message), ##__VA_ARGS__);putchar('\n');} while(0)
#define LOG_DEBUG(message, ...) do {printf((message), ##__VA_ARGS__);putchar('\n');} while(0)
#define LOG_TRACE(message, ...) do {printf((message), ##__VA_ARGS__);putchar('\n');} while(0)
#define LOG_INFO(message, ...) do {printf((message), ##__VA_ARGS__);putchar('\n');} while(0)
#define LOG_WARN(message, ...) do {printf((message), ##__VA_ARGS__);putchar('\n');} while(0)
#define LOG_ERROR(message, ...) do {fprintf(stderr, (message), ##__VA_ARGS__);putchar('\n');} while(0)
#define LOG_FATAL(message, ...) do {fprintf(stderr, (message), ##__VA_ARGS__);putchar('\n');} while(0)
#ifdef __cplusplus
extern "C" {
#endif //__cplusplus

#endif
void cosigner_log_init(cosigner_log_callback cb, void* userp);

void cosigner_log_msg(int level, const char* file, int line, const char* func, const char* message, ...)
__attribute__ ((format (printf, 5, 6)));

#ifdef __cplusplus
}
#endif //__cplusplus

#define LOG(level, message, ...) cosigner_log_msg((level), __FILE__, __LINE__, __func__, (message), ##__VA_ARGS__)
#define LOG_TRACE(message, ...) LOG(COSIGNER_LOG_LEVEL_TRACE, message, ##__VA_ARGS__)
#define LOG_DEBUG(message, ...) LOG(COSIGNER_LOG_LEVEL_DEBUG, message, ##__VA_ARGS__)
#define LOG_INFO(message, ...) LOG(COSIGNER_LOG_LEVEL_INFO, message, ##__VA_ARGS__)
#define LOG_WARN(message, ...) LOG(COSIGNER_LOG_LEVEL_WARN, message, ##__VA_ARGS__)
#define LOG_ERROR(message, ...) LOG(COSIGNER_LOG_LEVEL_ERROR, message, ##__VA_ARGS__)
#define LOG_FATAL(message, ...) LOG(COSIGNER_LOG_LEVEL_FATAL, message, ##__VA_ARGS__)
6 changes: 3 additions & 3 deletions src/common/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ endif
COMMON_CFLAGS := $(COMMON_CFLAGS)

C_Files := crypto/shamir_secret_sharing/verifiable_secret_sharing.c crypto/paillier/paillier.c crypto/paillier/paillier_zkp.c crypto/GFp_curve_algebra/GFp_curve_algebra.c \
crypto/commitments/commitments.c crypto/zero_knowledge_proof/schnorr.c crypto/zero_knowledge_proof/range_proofs.c crypto/zero_knowledge_proof/diffie_hellman_log.c \
crypto/commitments/ring_pedersen.c crypto/ed25519_algebra/ed25519_algebra.c crypto/drng/drng.c crypto/keccak1600/keccak1600.c
crypto/commitments/commitments.c crypto/zero_knowledge_proof/schnorr.c crypto/zero_knowledge_proof/range_proofs.c crypto/zero_knowledge_proof/diffie_hellman_log.c \
crypto/commitments/ring_pedersen.c crypto/ed25519_algebra/ed25519_algebra.c crypto/drng/drng.c crypto/keccak1600/keccak1600.c logging/logging_t.c

C_Objects := $(C_Files:.c=.o)

Cpp_Files := cosigner/cosigner_exception.cpp cosigner/cmp_setup_service.cpp cosigner/cmp_offline_refresh_service.cpp cosigner/utils.cpp \
Expand Down
1 change: 1 addition & 0 deletions src/common/lib.lds
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ libcosigner.so
range_proof_*;
schnorr_zkp_*;
derive_*;
cosigner_log_*;
_ZN10fireblocks6common8cosigner17*;
_ZN10fireblocks6common8cosigner2*;
_ZN10fireblocks6common8cosigner32*;
Expand Down
46 changes: 46 additions & 0 deletions src/common/logging/logging_t.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
#include "logging/logging_t.h"

#include <stdarg.h>
#include <stdio.h>

#define MAX_LOG_SIZE 4096

static void default_log_callback(int level, const char* file, int line, const char* func, const char* message, void* userp)
{
(void)file;
(void)line;
(void)func;
(void)userp;

if (level >= COSIGNER_LOG_LEVEL_ERROR)
fprintf(stderr, "%s\n", message);
else
printf("%s\n", message);
}

static cosigner_log_callback log_callback = default_log_callback;
static void* log_callback_user_data_pointer = NULL;

void cosigner_log_init(cosigner_log_callback cb, void* userp)
{
log_callback = cb;
log_callback_user_data_pointer = userp;
}

void cosigner_log_msg(int level, const char* file, int line, const char* func, const char* message, ...)
{
va_list args;
char buffer[MAX_LOG_SIZE] = { '\0' };

if (log_callback == NULL)
return;

if (message != NULL)
{
va_start(args, message);
vsnprintf(buffer, MAX_LOG_SIZE, message, args);
va_end(args);
}

log_callback(level, file, line, func, buffer, log_callback_user_data_pointer);
}

0 comments on commit cb64940

Please sign in to comment.