From 6b1ce9677876dd83e94df9c71222e03d7bd53c7e Mon Sep 17 00:00:00 2001 From: shixuantong Date: Sun, 16 Feb 2025 16:21:16 +0800 Subject: [PATCH] add log utils for c --- Makefile | 14 ++++++- src/libsentry/c/log/CMakeLists.txt | 7 ++++ src/libsentry/c/log/log_utils.c | 44 ++++++++++++++++++++ src/libsentry/c/log/log_utils.h | 64 ++++++++++++++++++++++++++++++ 4 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 src/libsentry/c/log/CMakeLists.txt create mode 100644 src/libsentry/c/log/log_utils.c create mode 100644 src/libsentry/c/log/log_utils.h diff --git a/Makefile b/Makefile index 29c4a53..73ada63 100644 --- a/Makefile +++ b/Makefile @@ -29,12 +29,16 @@ PKGVEREGG := syssentry-$(VERSION)-py$(PYTHON_VERSION).egg-info all: lib ebpf hbm_online_repair -lib:libxalarm +lib:libxalarm log libxalarm: cd $(CURLIBDIR) && cmake . -DXD_INSTALL_BINDIR=$(LIBINSTALLDIR) -B build cd $(CURLIBDIR)/build && make +log: + cd $(CURSRCDIR)/libsentry/c/log && cmake . -B build + cd $(CURSRCDIR)/libsentry/c/log/build && make + ebpf: @if [ -d "$(CURSRCDIR)/services/sentryCollector/ebpf_collector/" ]; then \ cd $(CURSRCDIR)/services/sentryCollector/ebpf_collector/ && make; \ @@ -134,6 +138,11 @@ isentry: # pyxalarm install -m 550 src/libs/pyxalarm/register_xalarm.py $(PYDIR)/xalarm + + # log utils + install -d -m 700 $(INCLUDEDIR)/libsentry + install -m 644 $(CURSRCDIR)/libsentry/c/log/log_utils.h $(INCLUDEDIR)/libsentry/ + install -m 550 $(CURSRCDIR)/libsentry/c/log/build/libsentry_log.so $(LIBINSTALLDIR) ebpf_clean: cd $(CURSRCDIR)/services/sentryCollector/ebpf_collector && make clean @@ -144,6 +153,7 @@ hbm_clean: clean: ebpf_clean hbm_clean rm -rf $(CURLIBDIR)/build rm -rf $(CURSRCDIR)/build + rm -rf $(CURSRCDIR)/libsentry/c/log/build rm -rf $(CURSRCDIR)/syssentry.egg-info rm -rf $(CURSRCDIR)/SENTRY_FILES @@ -156,6 +166,8 @@ uninstall: rm -rf $(BINDIR)/ebpf_collector rm -rf $(LIBINSTALLDIR)/libxalarm.so rm -rf $(INCLUDEDIR)/xalarm + rm -rf $(LIBINSTALLDIR)/libsentry_log.so + rm -rf $(INCLUDEDIR)/libsentry rm -rf $(ETCDIR)/sysSentry rm -rf $(ETCDIR)/hbm_online_repair.env rm -rf $(LOGSAVEDIR)/sysSentry diff --git a/src/libsentry/c/log/CMakeLists.txt b/src/libsentry/c/log/CMakeLists.txt new file mode 100644 index 0000000..6488195 --- /dev/null +++ b/src/libsentry/c/log/CMakeLists.txt @@ -0,0 +1,7 @@ +# Copyright (c) Huawei Technologies Co., Ltd. 2023-2025. All rights reserved. +# Description: cmake file for log_utils +project(sentry_log) +cmake_minimum_required(VERSION 3.22) +add_library(sentry_log SHARED log_utils.c) +set_target_properties(sentry_log PROPERTIES LINK_FLAGS "-Wl,-z,relro -Wl,-z,now -Wl,-z,noexecstack -Wtrampolines") +set_target_properties(sentry_log PROPERTIES CMAKE_C_FLAGS "-shared -fPIC -fstack-protector-strong -D_FORTIFY_SOURCE=2 -O2 -Wall -Werror -g") diff --git a/src/libsentry/c/log/log_utils.c b/src/libsentry/c/log/log_utils.c new file mode 100644 index 0000000..f560a9e --- /dev/null +++ b/src/libsentry/c/log/log_utils.c @@ -0,0 +1,44 @@ +/* + * Copyright (c) Huawei Technologies Co., Ltd. 2023-2025. All rights reserved. + * Description: log utils for sysSentry + * Author: sxt1001 + * Create: 2025-2-16 + */ + +#include "log_utils.h" + +static LogLevel currentLogLevel = LOG_INFO; + +void logMessage(LogLevel level, char* file, int line, const char *format, ...) +{ + if (level >= currentLogLevel) { + PRINT_LOG_PREFIX(level, file, line); + va_list args; + va_start(args, format); + vfprintf(LOG_FD(level), format, args); + va_end(args); + } +} + +void setLogLevel() +{ + currentLogLevel = LOG_INFO; + char* levelStr = getenv(LOG_LEVEL_ENV); + if (levelStr == NULL) { + logMessage(LOG_WARN, __FILE__, __LINE__, "getenv('%s') is NULL, use default log level : %s\n", LOG_LEVEL_ENV, LOG_LEVEL_STRING(LOG_INFO)); + } else if (strcmp(levelStr, "info") == 0) { + currentLogLevel = LOG_INFO; + logMessage(LOG_INFO, __FILE__, __LINE__, "Set log level : %s\n", LOG_LEVEL_STRING(LOG_INFO)); + } else if (strcmp(levelStr, "warning") == 0) { + currentLogLevel = LOG_WARN; + logMessage(LOG_INFO,__FILE__, __LINE__,"Set log level : %s\n", LOG_LEVEL_STRING(LOG_WARN)); + } else if (strcmp(levelStr, "error") == 0) { + currentLogLevel = LOG_ERROR; + logMessage(LOG_INFO,__FILE__, __LINE__,"Set log level : %s\n", LOG_LEVEL_STRING(LOG_ERROR)); + } else if (strcmp(levelStr, "debug") == 0) { + currentLogLevel = LOG_DEBUG; + logMessage(LOG_INFO,__FILE__, __LINE__,"Set log level : %s\n", LOG_LEVEL_STRING(LOG_DEBUG)); + } else { + logMessage(LOG_WARN, __FILE__, __LINE__, "unknown log level : %s, use default log level : %s\n", levelStr, LOG_LEVEL_STRING(LOG_INFO)); + } +} diff --git a/src/libsentry/c/log/log_utils.h b/src/libsentry/c/log/log_utils.h new file mode 100644 index 0000000..8a56520 --- /dev/null +++ b/src/libsentry/c/log/log_utils.h @@ -0,0 +1,64 @@ +/* + * Copyright (c) Huawei Technologies Co., Ltd. 2023-2025. All rights reserved. + * Description: log utils for sysSentry + * Author: sxt1001 + * Create: 2025-2-16 + */ + +#ifndef _SYSSENTRY_LOG_H +#define _SYSSENTRY_LOG_H + +#include "stdio.h" +#include +#include "string.h" +#include "stdarg.h" +#include "time.h" +#include "libgen.h" + +typedef enum { + LOG_DEBUG = 0, + LOG_INFO, + LOG_WARN, + LOG_ERROR, +} LogLevel; + +#define LOG_FD(level) (level == LOG_ERROR ? stderr : stdout) + +#define LOG_LEVEL_STRING(level) \ + (level == LOG_DEBUG ? "DEBUG": \ + level == LOG_INFO ? "INFO" : \ + level == LOG_WARN ? "WARNING" : \ + level == LOG_ERROR ? "ERROR" : \ + "UNKNOWN_LEVEL") + +#define PRINT_LOG_PREFIX(level, file, line) do { \ + time_t t = time(NULL); \ + struct tm *local_time = localtime(&t); \ + fprintf(LOG_FD(level), "%d-%02d-%02d %02d:%02d:%02d,000 - %s - [%s:%d] - ", \ + local_time->tm_year + 1900, \ + local_time->tm_mon + 1, \ + local_time->tm_mday, \ + local_time->tm_hour, \ + local_time->tm_min, \ + local_time->tm_sec, \ + LOG_LEVEL_STRING(level), \ + basename(file), \ + line); \ +} while (0) + +// configure Env for log +#define LOG_LEVEL_ENV "LOG_LEVEL" + +// print msg +void logMessage(LogLevel level, char* file, int line, const char *format, ...); + +// set log level +void setLogLevel(); + +// log function +#define logging_debug(...) logMessage(LOG_DEBUG, __FILE__, __LINE__, __VA_ARGS__) +#define logging_info(...) logMessage(LOG_INFO, __FILE__, __LINE__, __VA_ARGS__) +#define logging_warn(...) logMessage(LOG_WARN, __FILE__, __LINE__, __VA_ARGS__) +#define logging_error(...) logMessage(LOG_ERROR, __FILE__, __LINE__, __VA_ARGS__) + +#endif -- Gitee