diff --git a/CMakeLists.txt b/CMakeLists.txt index baca6f8..910300c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -104,6 +104,7 @@ add_compile_options(-Wall -Wtype-limits -Werror) add_library(ngx_otel_module MODULE src/http_module.cpp + src/grpc_log.cpp src/modules.c ${PROTO_SOURCES}) diff --git a/src/grpc_log.cpp b/src/grpc_log.cpp new file mode 100644 index 0000000..d6e1150 --- /dev/null +++ b/src/grpc_log.cpp @@ -0,0 +1,52 @@ +#include "ngx.hpp" + +#include "grpc_log.hpp" + +#include +#include + +class ProtobufLog { +public: + ProtobufLog() { google::protobuf::SetLogHandler(protobufLogHandler); } + ~ProtobufLog() { google::protobuf::SetLogHandler(NULL); } + +private: + static void protobufLogHandler(google::protobuf::LogLevel logLevel, + const char* filename, int line, const std::string& msg) + { + using namespace google::protobuf; + + ngx_uint_t level = logLevel == LOGLEVEL_FATAL ? NGX_LOG_EMERG : + logLevel == LOGLEVEL_ERROR ? NGX_LOG_ERR : + logLevel == LOGLEVEL_WARNING ? NGX_LOG_WARN : + /*LOGLEVEL_INFO*/ NGX_LOG_INFO; + + ngx_log_error(level, ngx_cycle->log, 0, "OTel/protobuf: %s", + msg.c_str()); + } +}; + +class GrpcLog { +public: + GrpcLog() { gpr_set_log_function(grpcLogHandler); } + ~GrpcLog() { gpr_set_log_function(NULL); } + +private: + static void grpcLogHandler(gpr_log_func_args* args) + { + ngx_uint_t level = + args->severity == GPR_LOG_SEVERITY_ERROR ? NGX_LOG_ERR : + args->severity == GPR_LOG_SEVERITY_INFO ? NGX_LOG_INFO : + /*GPR_LOG_SEVERITY_DEBUG*/ NGX_LOG_DEBUG; + + ngx_log_error(level, ngx_cycle->log, 0, "OTel/grpc: %s", + args->message); + } + + ProtobufLog protoLog; +}; + +void initGrpcLog() +{ + static GrpcLog init; +} diff --git a/src/grpc_log.hpp b/src/grpc_log.hpp new file mode 100644 index 0000000..e6da5c9 --- /dev/null +++ b/src/grpc_log.hpp @@ -0,0 +1,3 @@ +#pragma once + +void initGrpcLog(); diff --git a/src/ngx.hpp b/src/ngx.hpp new file mode 100644 index 0000000..63351fa --- /dev/null +++ b/src/ngx.hpp @@ -0,0 +1,7 @@ +#pragma once + +extern "C" { +#include +#include +#include +} diff --git a/src/ngx_otel_module.cpp b/src/ngx_otel_module.cpp index 04d47da..53c1e22 100644 --- a/src/ngx_otel_module.cpp +++ b/src/ngx_otel_module.cpp @@ -1,10 +1,6 @@ -extern "C" { -#include -#include -#include -} +#include "ngx.hpp" -#include +#include "grpc_log.hpp" #include "str_view.hpp" #include "trace_context.hpp" @@ -503,15 +499,6 @@ ngx_int_t onRequestEnd(ngx_http_request_t* r) return NGX_DECLINED; } -void grpcLogHandler(gpr_log_func_args* args) -{ - ngx_uint_t level = args->severity == GPR_LOG_SEVERITY_ERROR ? NGX_LOG_ERR : - args->severity == GPR_LOG_SEVERITY_INFO ? NGX_LOG_INFO : - /*GPR_LOG_SEVERITY_DEBUG*/ NGX_LOG_DEBUG; - - ngx_log_error(level, ngx_cycle->log, 0, "OTel/grpc: %s", args->message); -} - ngx_int_t initModule(ngx_conf_t* cf) { auto cmcf = (ngx_http_core_main_conf_t*)ngx_http_conf_get_module_main_conf( @@ -533,7 +520,7 @@ ngx_int_t initModule(ngx_conf_t* cf) *h = onRequestEnd; - gpr_set_log_function(grpcLogHandler); + initGrpcLog(); return NGX_OK; }