From 42c762a7fe4dcbcef013d566e9acc503c8d3093b Mon Sep 17 00:00:00 2001 From: fengzero Date: Mon, 25 Apr 2022 02:51:46 +0000 Subject: [PATCH] package zlog --- .github/workflows/ci.yml | 3 +- CMakeLists.txt | 5 +- include/neuron/utils/zlog.h | 279 +++++++++++++++++++++++++++++++ package-sdk.sh | 2 + package.sh | 3 + package/create_neuron_deb.py | 3 + package/create_neuron_sdk_deb.py | 3 + src/main.c | 3 + zlog.conf | 7 + 9 files changed, 304 insertions(+), 4 deletions(-) create mode 100644 include/neuron/utils/zlog.h create mode 100644 zlog.conf diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7f0c029e..fda1fce1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,7 +21,7 @@ jobs: uses: DoozyX/clang-format-lint-action@v0.12 with: source: 'src plugins include tests' - exclude: 'include/neuron/vector.h include/neuron/utils/uthash.h include/neuron/utils/utarray.h include/neuron/utils/utlist.h' + exclude: 'include/neuron/vector.h include/neuron/utils/uthash.h include/neuron/utils/utarray.h include/neuron/utils/utlist.h include/neuron/utils/zlog.h' clangFormatVersion: 10 style: file @@ -134,7 +134,6 @@ jobs: mkdir -p build && cd build cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/x86_64-linux-gnu.cmake make -j4 - ldd neuron - name: function test run: | diff --git a/CMakeLists.txt b/CMakeLists.txt index 6d7f8f82..41a36776 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -137,7 +137,7 @@ if(APPLE) else() target_link_libraries(neuron dl nng jansson yaml neuron-base) endif() -target_link_libraries(neuron zlog ssl crypto ${CMAKE_THREAD_LIBS_INIT}) +target_link_libraries(neuron ssl crypto ${CMAKE_THREAD_LIBS_INIT}) # define neuron base library set(NEURON_BASE_SOURCES @@ -191,10 +191,11 @@ if(USE_NNG_MQTT) target_link_libraries(neuron-base mbedtls mbedx509 mbedcrypto nng) endif() -target_link_libraries(neuron-base vector-static csptr jansson crypto ssl mqttc yaml jwt +target_link_libraries(neuron-base libzlog.so vector-static csptr jansson crypto ssl mqttc yaml jwt ${CMAKE_THREAD_LIBS_INIT}) #copy file for run +file(COPY ${CMAKE_SOURCE_DIR}/zlog.conf DESTINATION ${CMAKE_BINARY_DIR}/config) file(COPY ${CMAKE_SOURCE_DIR}/.gitkeep DESTINATION ${CMAKE_BINARY_DIR}/logs) file(COPY ${CMAKE_SOURCE_DIR}/neuron.yaml DESTINATION ${CMAKE_BINARY_DIR}/config) file(COPY ${CMAKE_SOURCE_DIR}/plugins/ekuiper/ekuiper.json DESTINATION ${CMAKE_BINARY_DIR}/plugins/schema/) diff --git a/include/neuron/utils/zlog.h b/include/neuron/utils/zlog.h new file mode 100644 index 00000000..9642e089 --- /dev/null +++ b/include/neuron/utils/zlog.h @@ -0,0 +1,279 @@ +/* + * This file is part of the zlog Library. + * + * Copyright (C) 2011 by Hardy Simpson + * + * Licensed under the LGPL v2.1, see the file COPYING in base directory. + */ + +#ifndef __zlog_h +#define __zlog_h + +#ifdef __cplusplus +extern "C" { +#endif + +#include /* for va_list */ +#include /* for size_t */ + +# if defined __GNUC__ +# define ZLOG_CHECK_PRINTF(m,n) __attribute__((format(printf,m,n))) +# else +# define ZLOG_CHECK_PRINTF(m,n) +# endif + +typedef struct zlog_category_s zlog_category_t; + +int zlog_init(const char *config); +int zlog_reload(const char *config); +void zlog_fini(void); + +void zlog_profile(void); + +zlog_category_t *zlog_get_category(const char *cname); +int zlog_level_enabled(zlog_category_t *category, const int level); + +int zlog_put_mdc(const char *key, const char *value); +char *zlog_get_mdc(const char *key); +void zlog_remove_mdc(const char *key); +void zlog_clean_mdc(void); + +int zlog_level_switch(zlog_category_t * category, int level); +int zlog_level_enabled(zlog_category_t * category, int level); + +void zlog(zlog_category_t * category, + const char *file, size_t filelen, + const char *func, size_t funclen, + long line, int level, + const char *format, ...) ZLOG_CHECK_PRINTF(8,9); +void vzlog(zlog_category_t * category, + const char *file, size_t filelen, + const char *func, size_t funclen, + long line, int level, + const char *format, va_list args); +void hzlog(zlog_category_t * category, + const char *file, size_t filelen, + const char *func, size_t funclen, + long line, int level, + const void *buf, size_t buflen); + +int dzlog_init(const char *confpath, const char *cname); +int dzlog_set_category(const char *cname); + +void dzlog(const char *file, size_t filelen, + const char *func, size_t funclen, + long line, int level, + const char *format, ...) ZLOG_CHECK_PRINTF(7,8); +void vdzlog(const char *file, size_t filelen, + const char *func, size_t funclen, + long line, int level, + const char *format, va_list args); +void hdzlog(const char *file, size_t filelen, + const char *func, size_t funclen, + long line, int level, + const void *buf, size_t buflen); + +typedef struct zlog_msg_s { + char *buf; + size_t len; + char *path; +} zlog_msg_t; + +typedef int (*zlog_record_fn)(zlog_msg_t *msg); +int zlog_set_record(const char *rname, zlog_record_fn record); + +const char *zlog_version(void); + +/******* useful macros, can be redefined at user's h file **********/ + +typedef enum { + ZLOG_LEVEL_DEBUG = 20, + ZLOG_LEVEL_INFO = 40, + ZLOG_LEVEL_NOTICE = 60, + ZLOG_LEVEL_WARN = 80, + ZLOG_LEVEL_ERROR = 100, + ZLOG_LEVEL_FATAL = 120 +} zlog_level; + +#if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L +# if defined __GNUC__ && __GNUC__ >= 2 +# define __func__ __FUNCTION__ +# else +# define __func__ "" +# endif +#endif + +#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L +/* zlog macros */ +#define zlog_fatal(cat, ...) \ + zlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_FATAL, __VA_ARGS__) +#define zlog_error(cat, ...) \ + zlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_ERROR, __VA_ARGS__) +#define zlog_warn(cat, ...) \ + zlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_WARN, __VA_ARGS__) +#define zlog_notice(cat, ...) \ + zlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_NOTICE, __VA_ARGS__) +#define zlog_info(cat, ...) \ + zlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_INFO, __VA_ARGS__) +#define zlog_debug(cat, ...) \ + zlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_DEBUG, __VA_ARGS__) +/* dzlog macros */ +#define dzlog_fatal(...) \ + dzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_FATAL, __VA_ARGS__) +#define dzlog_error(...) \ + dzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_ERROR, __VA_ARGS__) +#define dzlog_warn(...) \ + dzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_WARN, __VA_ARGS__) +#define dzlog_notice(...) \ + dzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_NOTICE, __VA_ARGS__) +#define dzlog_info(...) \ + dzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_INFO, __VA_ARGS__) +#define dzlog_debug(...) \ + dzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_DEBUG, __VA_ARGS__) +#elif defined __GNUC__ +/* zlog macros */ +#define zlog_fatal(cat, format, args...) \ + zlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_FATAL, format, ##args) +#define zlog_error(cat, format, args...) \ + zlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_ERROR, format, ##args) +#define zlog_warn(cat, format, args...) \ + zlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_WARN, format, ##args) +#define zlog_notice(cat, format, args...) \ + zlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_NOTICE, format, ##args) +#define zlog_info(cat, format, args...) \ + zlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_INFO, format, ##args) +#define zlog_debug(cat, format, args...) \ + zlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_DEBUG, format, ##args) +/* dzlog macros */ +#define dzlog_fatal(format, args...) \ + dzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_FATAL, format, ##args) +#define dzlog_error(format, args...) \ + dzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_ERROR, format, ##args) +#define dzlog_warn(format, args...) \ + dzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_WARN, format, ##args) +#define dzlog_notice(format, args...) \ + dzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_NOTICE, format, ##args) +#define dzlog_info(format, args...) \ + dzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_INFO, format, ##args) +#define dzlog_debug(format, args...) \ + dzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_DEBUG, format, ##args) +#endif + +/* vzlog macros */ +#define vzlog_fatal(cat, format, args) \ + vzlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_FATAL, format, args) +#define vzlog_error(cat, format, args) \ + vzlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_ERROR, format, args) +#define vzlog_warn(cat, format, args) \ + vzlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_WARN, format, args) +#define vzlog_notice(cat, format, args) \ + vzlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_NOTICE, format, args) +#define vzlog_info(cat, format, args) \ + vzlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_INFO, format, args) +#define vzlog_debug(cat, format, args) \ + vzlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_DEBUG, format, args) + +/* hzlog macros */ +#define hzlog_fatal(cat, buf, buf_len) \ + hzlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_FATAL, buf, buf_len) +#define hzlog_error(cat, buf, buf_len) \ + hzlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_ERROR, buf, buf_len) +#define hzlog_warn(cat, buf, buf_len) \ + hzlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_WARN, buf, buf_len) +#define hzlog_notice(cat, buf, buf_len) \ + hzlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_NOTICE, buf, buf_len) +#define hzlog_info(cat, buf, buf_len) \ + hzlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_INFO, buf, buf_len) +#define hzlog_debug(cat, buf, buf_len) \ + hzlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_DEBUG, buf, buf_len) + + +/* vdzlog macros */ +#define vdzlog_fatal(format, args) \ + vdzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_FATAL, format, args) +#define vdzlog_error(format, args) \ + vdzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_ERROR, format, args) +#define vdzlog_warn(format, args) \ + vdzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_WARN, format, args) +#define vdzlog_notice(format, args) \ + vdzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_NOTICE, format, args) +#define vdzlog_info(format, args) \ + vdzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_INFO, format, args) +#define vdzlog_debug(format, args) \ + vdzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_DEBUG, format, args) + +/* hdzlog macros */ +#define hdzlog_fatal(buf, buf_len) \ + hdzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_FATAL, buf, buf_len) +#define hdzlog_error(buf, buf_len) \ + hdzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_ERROR, buf, buf_len) +#define hdzlog_warn(buf, buf_len) \ + hdzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_WARN, buf, buf_len) +#define hdzlog_notice(buf, buf_len) \ + hdzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_NOTICE, buf, buf_len) +#define hdzlog_info(buf, buf_len) \ + hdzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_INFO, buf, buf_len) +#define hdzlog_debug(buf, buf_len) \ + hdzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ + ZLOG_LEVEL_DEBUG, buf, buf_len) + +/* enabled macros */ +#define zlog_fatal_enabled(zc) zlog_level_enabled(zc, ZLOG_LEVEL_FATAL) +#define zlog_error_enabled(zc) zlog_level_enabled(zc, ZLOG_LEVEL_ERROR) +#define zlog_warn_enabled(zc) zlog_level_enabled(zc, ZLOG_LEVEL_WARN) +#define zlog_notice_enabled(zc) zlog_level_enabled(zc, ZLOG_LEVEL_NOTICE) +#define zlog_info_enabled(zc) zlog_level_enabled(zc, ZLOG_LEVEL_INFO) +#define zlog_debug_enabled(zc) zlog_level_enabled(zc, ZLOG_LEVEL_DEBUG) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/package-sdk.sh b/package-sdk.sh index 5170c34b..639176eb 100755 --- a/package-sdk.sh +++ b/package-sdk.sh @@ -71,6 +71,8 @@ cp ft/common.resource ${package_name}/ft/ cp ft/error.resource ${package_name}/ft/ cp ft/requirements.txt ${package_name}/ft/ +cp zlog/src/libzlog.so.1.2 ${package_name}/lib + tar czf ${package_name}-${arch}.tar.gz ${package_name}/ ls ${package_name} rm -rf ${package_name} diff --git a/package.sh b/package.sh index 35d8664c..49383d3f 100755 --- a/package.sh +++ b/package.sh @@ -40,8 +40,11 @@ else rm -rf ${package_name}/* fi +cp zlog/src/libzlog.so.1.2 ${package_name} + cp .gitkeep ${package_name}/logs/ cp default_plugins.json ${package_name}/persistence/plugins.json +cp zlog.conf ${package_name}/config/ cp build/libneuron-base.so \ build/neuron \ diff --git a/package/create_neuron_deb.py b/package/create_neuron_deb.py index add3558f..f8e91c73 100755 --- a/package/create_neuron_deb.py +++ b/package/create_neuron_deb.py @@ -15,6 +15,9 @@ rules.append(mkdeb.FileMap("neuron.service", "/etc/systemd/system/")) rules.append(mkdeb.FileMap("neuron.sh", "/opt/neuron/", "x")) rules.append(mkdeb.FileMap("../build/neuron", "/opt/neuron/", "x")) +rules.append(mkdeb.FileMap("../zlog.conf", "/opt/neuron/config/")) +rules.append(mkdeb.FileMap("../zlog/src/libzlog.so.1.2", "/usr/local/lib/")) + rules.append(mkdeb.FileMap("../.gitkeep", "/opt/neuron/logs/")) rules.append(mkdeb.FileMap("../.gitkeep", "/opt/neuron/core/")) diff --git a/package/create_neuron_sdk_deb.py b/package/create_neuron_sdk_deb.py index 37e1efe8..29a435c3 100755 --- a/package/create_neuron_sdk_deb.py +++ b/package/create_neuron_sdk_deb.py @@ -12,6 +12,7 @@ rules.append(mkdeb.FileMap("deb/sdk/prerm", "/DEBIAN/", "r", "prerm")) rules.append(mkdeb.FileMap("../cmake/neuron-config.cmake", "/usr/local/lib/cmake/neuron/")) rules.append(mkdeb.FileMap("../build/libneuron-base.so", "/usr/local/lib/")) +rules.append(mkdeb.FileMap("../zlog/src/libzlog.so.1.2", "/usr/local/lib/")) rules.append(mkdeb.FileMap("../include/connection/mqtt_client_intf.h", "/usr/local/include/neuron/connection/")) @@ -57,6 +58,8 @@ rules.append(mkdeb.FileMap("../include/neuron/utils/utarray.h", "/usr/local/include/neuron/utils/")) rules.append(mkdeb.FileMap("../include/neuron/utils/utlist.h", "/usr/local/include/neuron/utils/")) +rules.append(mkdeb.FileMap("../include/neuron/utils/zlog.h", + "/usr/local/include/neuron/utils/")) rules.append(mkdeb.FileMap("../include/neuron/adapter.h", "/usr/local/include/neuron/")) rules.append(mkdeb.FileMap("../include/neuron/adapter_msg.h", diff --git a/src/main.c b/src/main.c index 43dc67e4..53b7a9c8 100644 --- a/src/main.c +++ b/src/main.c @@ -27,6 +27,8 @@ #include #include +#include + #include #include #include @@ -196,6 +198,7 @@ int main(int argc, char *argv[]) pid_t pid = 0; neu_cli_args_t args = { 0 }; + zlog_init("./config/zlog.conf"); neu_cli_args_init(&args, argc, argv); if (args.daemonized) { diff --git a/zlog.conf b/zlog.conf new file mode 100644 index 00000000..96e32316 --- /dev/null +++ b/zlog.conf @@ -0,0 +1,7 @@ +[formats] + +simple = "%m%n" + +[rules] + +*.DEBUG >stdout; simple \ No newline at end of file