From 56f22795065eb8ef3547aebe6628de7ddec79a1d Mon Sep 17 00:00:00 2001 From: peggiezhu Date: Fri, 20 Oct 2023 17:29:07 +0800 Subject: [PATCH] Feature: Optimize local framework logging output --- .github/.codecov.yml | 1 + docs/README.md | 1 + docs/README.zh_CN.md | 1 + docs/en/local_logging.md | 403 ++++++++++++++++++++++ docs/en/overview.md | 2 +- docs/images/log_design.png | Bin 0 -> 273450 bytes docs/zh/local_logging.md | 403 ++++++++++++++++++++++ trpc/config/BUILD | 10 + trpc/config/config.h | 10 +- trpc/config/config_test.cc | 106 ++++++ trpc/config/default/loader.cc | 8 +- trpc/config/default/loader_test.cc | 40 ++- trpc/config/testing/BUILD | 8 + trpc/config/testing/mock_config.h | 46 +++ trpc/config/trpc_conf.h | 4 +- trpc/config/trpc_conf_compatible.h | 4 +- trpc/config/trpc_conf_deprecated.h | 6 +- trpc/util/log/default/default_log.cc | 42 ++- trpc/util/log/default/default_log.h | 17 + trpc/util/log/default/default_log_test.cc | 31 +- trpc/util/log/log.h | 5 + trpc/util/log/logging.h | 45 ++- trpc/util/log/printf_like.h | 39 ++- trpc/util/log/python_like.h | 24 ++ trpc/util/log/stream_like.h | 82 ++++- 25 files changed, 1262 insertions(+), 76 deletions(-) create mode 100644 docs/en/local_logging.md create mode 100644 docs/images/log_design.png create mode 100644 docs/zh/local_logging.md create mode 100644 trpc/config/config_test.cc create mode 100644 trpc/config/testing/mock_config.h diff --git a/.github/.codecov.yml b/.github/.codecov.yml index d5fbdf65..dc1abbb7 100644 --- a/.github/.codecov.yml +++ b/.github/.codecov.yml @@ -7,4 +7,5 @@ coverage: status: project: default: + informational: true threshold: 1% diff --git a/docs/README.md b/docs/README.md index 1f364442..918340cf 100644 --- a/docs/README.md +++ b/docs/README.md @@ -56,6 +56,7 @@ English | [中文](README.zh_CN.md) * [custom metrics plugin](./en/custom_metrics.md) * [prometheus](./en/prometheus_metrics.md) * Logging + * [local logging tools](./en/local_logging.md) * [custom logging plugin](./en/custom_logging.md) * [cls](https://github.com/trpc-ecosystem/cpp-logging-cls/blob/main/README.md) * Tracing diff --git a/docs/README.zh_CN.md b/docs/README.zh_CN.md index 07d68c32..f21b14f5 100644 --- a/docs/README.zh_CN.md +++ b/docs/README.zh_CN.md @@ -55,6 +55,7 @@ * [开发自定义metrics插件](./zh/custom_metrics.md) * [prometheus](./zh/prometheus_metrics.md) * Logging插件 + * [本地日志工具](./zh/local_logging.md) * [开发自定义logging插件](./zh/custom_logging.md) * [cls](https://github.com/trpc-ecosystem/cpp-logging-cls/blob/main/README.zh_CN.md) * Tracing插件 diff --git a/docs/en/local_logging.md b/docs/en/local_logging.md new file mode 100644 index 00000000..d6133c0c --- /dev/null +++ b/docs/en/local_logging.md @@ -0,0 +1,403 @@ +# Overview +Logs are an important part of software development, and good logs are an important source of information for analyzing the running state of software. The tRPC-Cpp framework provides a complete solution for log printing, collection, and reporting for businesses. The purpose of this article is to provide users with the following information: + +- What logging features does the framework provide? +- How does the framework implement these features? +- How to use the standard logging interface? +- How to configure log settings? + +Terminology: +- Instance: Equivalent to logger, that is, multiple instances means multiple loggers +- Flow style: Refers to the use of TRPC_FLOW_LOG and TRPC_FLOW_LOG_EX log macros + +# Feature Introduction +## Overview of Features + +As shown in the figure, the tRPC-Cpp log module is based on SpdLog implementation, which includes two aspects: `log printing programming interface` and `docking with the log output end`. Logger and Sink concepts are introduced in the implementation. +![architecture design](../images/log_design.png) + +Logger and Sink are responsible for log printing and docking with the log service system, respectively. They both adopt plug-in programming and can be customized. Users can refer to[how to develop custom log plugins](./custom_logging.md).The definitions of Logger and Sink are as follows: +- Logger is responsible for implementing common interfaces related to log printing. Logger adopts plug-in programming and supports multi-Logger functions. Users can choose their logger to achieve differentiated log printing and collection. It is docked with the log backend through Sink plug-ins. +- Sink, also known as "log output end", is responsible for log collection and reporting functions, including log reporting format and docking with the backend log system, etc. Each Logger can have multiple Sinks, for example, Default, the default logger, can support output to local logs and remote cls at the same time. Sink adopts plug-in programming and can be flexibly expanded. + +The tRPC-Cpp framework provides four styles of log printing functions: +- Python style: The most elegant and convenient, recommended.[Detailed syntax](https://fmt.dev/latest/syntax.html) +- Printf style: Printf syntax, type-safe.[Detailed syntax](https://en.wikipedia.org/wiki/Printf_format_string) +- Stream style: Compatible with the old version, the framework prints logs in a more cumbersome way, not recommended for users. +- Flow style: Its underlying layer uses the stream style, but it can support inputting context and specifying logger. It is recommended for scenarios where business logs are printed separately from framework logs. + +## Log Printing Interface +First, the framework refers to industry standards to divide the log printing levels from low to high as follows: +| Level | Description | +| :--- | :---: | +| **trace** | The main function of this level of log is to accurately record the running status of every step of specific events in the system| +| **debug** | Indicates that fine-grained information events are very helpful for debugging applications, mainly used for printing some running information during development| +| **info**| Messages at the coarse-grained level emphasize the running process of the application. Print some interesting or important information, which can be used in the production environment to output some important information of the program running, but do not abuse it to avoid printing too many logs| +|**warn** |Indicates potential error situations, some information is not error information, but also needs to give some hints to the programmer| +|**error** |Indicates that although an error event occurs, it does not affect the continued operation of the system. Print error and exception information. If you do not want to output too many logs, you can use this level| +| **critical**|Indicates that every serious error event will cause the application to exit. This level is relatively high. Major errors, at this level you can stop the program directly| + +To accommodate different users' habits, the framework provides log macros similar to `python`, `printf`, `stream`, and `flow` for each level of log functions. The examples here are just to give users a rough understanding, and more detailed log macros are introduced below. + +- Recommended usage: Python-style log macros, as the performance of fmt::format is about 20% higher than std::ostream. + +``` +// Python style +TRPC_FMT_DEBUG("msg:{}", "test"); +// Printf style +TRPC_PRT_DEBUG("msg: %s", "test"); +// Stream style +TRPC_LOG_DEBUG("msg:" << "test"); +// Flow style +TRPC_FLOW_LOG_EX(ctx, "custom1", "msg:" << "test"); Can specify the input ctx and logger name +``` + +### 2.2.1 Default Log Macro Interface +- Macro interface description: It uses the default logger and has only one parameter, which represents the log content to be printed. tRPC-Cpp framework logs are based on this. +- Usage scenarios: Framework logs, debug logs +```cpp + int i = 0; + // Python-like + TRPC_FMT_TRACE("trpc-{}: {}", "cpp"); // trpc-cpp + TRPC_FMT_DEBUG("print floats {:03.2f}", 1.23456); // "print floats 001.23" + TRPC_FMT_INFO("hello trpc-{}: {}", "cpp", ++i); // "hello trpc-cpp: 2" + TRPC_FMT_ERROR("{} is smaller than {}?", 1, 2); // "1 is smaller than 2?" + TRPC_FMT_CRITICAL("coredump msg: {}?", "oom"); // "coredump msg: oom" + + // Printf-like + TRPC_PRT_INFO("just like %s: %d", "printf", ++i); // "just like printf: 3" + ... + + // Stream-like + TRPC_LOG_INFO("stream trace: " << ++i); // "stream trace: 1" + ... +``` +### Log Macro Interface with Context +- Macro interface description: It has 2 parameters, the first one is context, and the second one is log content. It should be noted that the context here is the base class of ClientContext and ServerContext, so it is applicable on both the client and server sides. + +```cpp +TRPC_LOG_TRACE_EX(context, msg); +TRPC_LOG_DEBUG_EX(context, msg); +TRPC_LOG_INFO_EX(context, msg); +TRPC_LOG_WARN_EX(context, msg); +TRPC_LOG_ERROR_EX(context, msg); +TRPC_LOG_DEBUG_EX(context, msg); + +// The log level of the framework is fixed at the info level +TRPC_FLOW_LOG_EX(context, instance, msg) +// Example +TRPC_FLOW_LOG_EX(ctx, "custom", "msg:" << "test") // ctx is the context object, custom is the logger name, output: msg: test +``` +Explanation: +instance refers to the name of the logger, users can specify different loggers through this macro, and can also get the context information, making the interface more flexible. +The log level of the framework is fixed at the info level, if users want to modify the log level, they can set it based on `TRPC_STREAM`, or they can use it to encapsulate a log macro, here is the implementation of `TRPC_FLOW_LOG` +``` +#define TRPC_FLOW_LOG(instance, msg) TRPC_STREAM(instance, trpc::Log::info, nullptr, msg) +#define TRPC_FLOW_LOG_EX(context, instance, msg) \ + TRPC_STREAM(instance, trpc::Log::info, context, msg) +``` + +### 2.2.3 Log Macro Interface with Specified Logger +- Macro interface description: Can specify logger, customize log output. +- Usage scenarios: +- Separate business logs from framework logs +- Different business logs specify different loggers +- Business logs output to remote + +Any of the above scenarios, or any combination of them, can be implemented through the log macro interface with a specified logger. +``` + // Flow style macro + TRPC_FLOW_LOG(instance, msg) + TRPC_FLOW_LOG_EX(context, instance, msg) + // Example + TRPC_FLOW_LOG("custom1", "hello" << "trpc") // hello trpc + TRPC_FLOW_LOG_EX("server_context", "custom2", "hello" << "trpc") // hello trpc + + // fmt style macro interface + TRPC_LOGGER_FMT_TRACE(instance, format, args...) + TRPC_LOGGER_FMT_DEBUG(instance, format, args...) + TRPC_LOGGER_FMT_INFO(instance, format, args...) + TRPC_LOGGER_FMT_WARN(instance, format, args...) + TRPC_LOGGER_FMT_ERROR(instance, format, args...) + TRPC_LOGGER_FMT_CRITICAL(instance, format, args...) + // Example + TRPC_LOGGER_FMT_WARN("custom3", "i am not {} logger", "default"); // "i am not default logger" +``` + +### Log Macro Interface with IF Condition +- Macro interface description: Conditional log macro, i.e., when the condition is met, the log is output, otherwise, it is not output. +- Usage scenario 1: Logs are output only if a custom condition is met +``` + // fmt style + TRPC_FMT_TRACE_IF(condition, format, args...) + TRPC_FMT_DEBUG_IF(condition, format, args...) + TRPC_FMT_INFO_IF(condition, format, args...) + TRPC_FMT_WARN_IF(condition, format, args...) + TRPC_FMT_ERROR_IF(condition, format, args...) + TRPC_FMT_CRITICAL_IF(condition, format, args...) + // Example + TRPC_FMT_INFO_IF(true, "if true, print: {}", "msg"); // "if true, print: msg" + + // printf style + TRPC_PRT_TRACE_IF(condition, format, args...) + TRPC_PRT_DEBUG_IF(condition, format, args...) + TRPC_PRT_INFO_IF(condition, format, args...) + TRPC_PRT_WARN_IF(condition, format, args...) + TRPC_PRT_ERROR_IF(condition, format, args...) + TRPC_PRT_CRITICAL_IF(condition, format, args...) + // Example + TRPC_PRT_INFO_IF(true, "if true, print: %s", "msg"); // "if true, print: msg" + + // stream style + TRPC_LOG_TRACE_IF(condition, msg) + TRPC_LOG_DEBUG_IF(condition, msg) + TRPC_LOG_INFO_IF(condition, msg) + TRPC_LOG_WARN_IF(condition, msg) + TRPC_LOG_ERROR_IF(condition, msg) + TRPC_LOG_CRITICAL_IF(condition, msg) + // Example + TRPC_LOG_INFO_IF(true, "if true, print: " << "msg"); // "if true, print: msg" + + // All the above macro interfaces can also be used in combination with LOGGER/Context, for example: + TRPC_LOGGER_FMT_INFO_IF(true, "if true, print: {}", "msg"); // "if true, print: msg" + TRPC_LOGGER_PRT_INFO_EX(context, true, "if true, print: %s", "msg"); // "if true, print: msg" + TRPC_LOGGER_LOG_INFO_IF_EX(context, true, "if true, print: " << "msg"); // "if true, print: msg" +``` +- Usage scenario 2: Users want to output logs but do not want to output too many logs causing performance degradation. +- In this scenario, you can use conditional macro operators +- TRPC_EVERY_N(c): Set this log to output at most 1 print for every c triggers, the first time must be triggered. +- TRPC_WITHIN_N(ms): Set this log to output at most 1 time within the set ms milliseconds if there are multiple triggers. The first time must be triggered. Usage examples are as follows +``` +TRPC_FMT_INFO_IF(TRPC_EVERY_N(1000), "condition every 1000"); # Print a log for every 1000 calls +TRPC_FMT_INFO_IF(TRPC_WITHIN_N(1000), "condition within 1000 ms"); # If there is more than one call within 1000ms, print at most one log +``` + +## Multiple Logger Support +tRPC-Cpp supports multiple loggers at the same time, with each logger having different log levels, print formats, reporting output backends, and businesses being able to set different loggers for different business scenarios. For example: + +- Different business modules use different log files for storage +- Different events, based on the degree of attention to events, use different log levels to collect logs + +The multi-Logger feature greatly increases the flexibility of log usage. + +## Multiple Sink Support +For the same logger, the framework also provides the ability to output logs to multiple log output backends (referred to as "sink") at the same time. Since the sink is also registered to the framework as a plugin, users can choose local, remote (such as cls, smart research logs, etc.), or none. The framework currently supports 4 output endpoints (Sink): +- Local rolling file (LocalFileSink): Configuration name is `local_file` +- Local console output (StdoutSink): Configuration name is stdout. + The above sink belongs to 2 different types: +- DefaultSink: + - The above LocalFileSink and StdoutSink are examples. + - The configuration is written under the sinks field. + - Requires returning a spdsink. + - All DefaultSinks belonging to an instance are attached to the built-in spdlogger of DefaultLog, so the received messages are the same. +- RawSink + - The clsLogSink mentioned above is an example. + - The configuration is written under the raw_sinks field. + - Requires implementing a log interface, receiving an additional context parameter, called synchronously by DefaultLog, and ensuring its own thread safety. + - Its behavior is completely defined by itself. Currently, clsLogSink creates a new spdlogger and spdsink internally and decides how to output based on the context. + +It should be emphasized that the log print settings are configured at the Sink level. Users need to configure each output endpoint, such as: the same log needs to be saved in the local log file and output to cls, then the local_file and cls_log sinks must be configured separately. + +# Log Configuration +## Configuration Structure +First, let's look at the overall structure of the log configuration. Since the log module implements both logger and sink using a plugin approach, log configurations must be placed in the "plugins" area. +```yaml +plugins: + log: + default: + - name: default # Default logger name + ... + sinks: # DefaultSink type plugins + local_file: # Local log sink + ... + raw_sinks: # RawSink type plugins + cls_log: # cls log sink + - name: custom1 # Custom logger name + ... + sinks: + local_file: + ... + raw_sinks: + cls_log: +``` +Explanation: +- The above configuration reflects the multi-logger and multi-sink features. "default" and "custom1" represent the logger names. Each logger configuration is an array of sinks. +- line 4: default represents the framework default logger +- line 6: sinks indicate that the configuration contains DefaultSink type plugins, such as local_file +- line 9: raw_sink indicates that the configuration contains RawtSink type plugins, such as cls_log + +## Logger Configuration +Logger configuration is usually inherited directly from the sink it manages, so some fields in the sink can be left unconfigured, such as format, to simplify configuration. First, let's introduce its parameter configuration, designed as follows. +|Configuration item | Type | Required | Default value |Configuration explanation| +| :--- | :---: | :---: | :---: | :---: | +| name | string | Optional | Empty | Logger name | +| min_level | int | Optional | 2 | Set the minimum log level, logs will only be output if the log level is greater than this | +| format | string | Optional | Empty | [%Y-%m-%d %H:%M:%S.%e] [thread %t] [%l] [%@] %v | +| mode | int | Optional | 2 | Optional: 1 Synchronous, 2 Asynchronous, 3 Extreme speed | + +Explanation: +format: Refer to [Format Description](https://github.com/gabime/spdlog/wiki/3.-Custom-formatting) +mode: +- Asynchronous:When printing logs, store the logs in a thread-safe cache queue and return directly. There is a separate thread inside to consume this queue and output to each output endpoint. If the queue is full, the output is blocked; if the queue is empty, the consumption is blocked. Recommended usage. +- Synchronous:When printing logs, directly traverse each output endpoint and wait for completion, +- Extreme speed: Basically the same as asynchronous mode, the only difference is that the output never blocks. Once the queue is full, the oldest log is discarded, and the current log is stored and returned. + +``` +plugins: + log: + default: + - name: default + min_level: 1 # 0-trace, 1-debug, 2-info, 3-warn, 4-error, 5-critical + format: "[%Y-%m-%d %H:%M:%S.%e] [thread %t] [%l] [%@] [%!] %v" + mode: 2 # 1-synchronous, 2-asynchronous, 3-extreme speed + sinks: + ... +``` + +## Sink Configuration +### Use Local Log +#### Local File Log +When the sink is set to "local_file", it means that the log is printed to the local log file. First, let's introduce its configuration items, as follows: +|Configuration item | Type | Required | Default value | Configuration explanation | +| :--- | :---: | :---: | :---: | :---: | +| format | string | Optional | Empty | Log output format, not filled in by default inherits logger | +| eol | bool | Optional | true | Whether to wrap when formatting output logs | +| filename | string | Required | Empty | Local log file name, default to the current path, can include the path | +| roll_type | string | Optional | by_size | Set the log segmentation method, default to by_size, optional by_day-day segmentation, by_hour-hour segmentation | +| reserve_count | int | Optional | 10 | Rolling log retention file count | +| roll_size | int | Optional | 100 x 1024 x 1024 | Only set this variable for by_size type, which represents the size of a rolling file | +| rotation_hour | int | Optional | 0 | Only set this variable for by_day type, which represents the cut-off time by day, the specific time is specified by rotation_hour:rotation_minute | +| rotation_minute | int | Optional | 0 | | +| remove_timout_file_switch | bool | Optional | false | Only set this variable for by_hour type, under the day segmentation mode, the flag for deleting outdated files | +| hour_interval | int | Optional | 1 | | hour_interval | int | Optional | 1 | This variable is set for the by_hour type and represents the interval in hours between the hours || + +Local log file output supports three output modes: +- By size: by_size +- By day: by_day +- By hour: by_hour + +The following introduces how to configure each +##### Output mode by size +```yaml +plugins: + log: + default: + - name: custom # Can be the default default, can use other logger names + format: "[%Y-%m-%d %H:%M:%S.%e] [thread %t] [%l] [%@] %v" + sinks: + local_file: # Local log sink + roll_type: by_size # Output local log mode + eol: true # Whether to wrap each output automatically. Default wrap + filename: /usr/local/trpc/bin/log_by_size.log # Log file name, including path (relative or absolute), default to trpc.log + roll_size: 10000 # Output single file size, default 100M + reserve_count: 5 # Output local log rolling file count, default 9 +``` + +##### Output mode by day +```yaml +plugins: + log: + default: + - name: custom # Can be the default default, can use other logger names + format: "[%Y-%m-%d %H:%M:%S.%e] [thread %t] [%l] [%@] %v" + sinks: + local_file: # Local log sink + roll_type: by_day # Output local log mode by day + eol: true # Whether to wrap each output automatically. Default wrap + filename: /usr/local/trpc/bin/log_by_day.log # Log file name, including path (relative or absolute), default to trpc.log + reserve_count: 5 # Output local log rolling file count, default 9 + rotation_hour: 0 # Represents the cut-off time by day, the specific time is specified by rotation_hour:rotation_minute + rotation_minute: 0 + remove_timout_file_switch: false # Under the day segmentation mode, the flag for deleting outdated files, default not to delete +``` + +##### Output mode by hour +```yaml +plugins: + log: + default: + - name: custom # Can be the default default, can use other logger names + format: "[%Y-%m-%d %H:%M:%S.%e] [thread %t] [%l] [%@] %v" + sinks: + local_file: # Local log sink + roll_type: by_hour # Output local log mode by hour + eol: true # Whether to wrap each output automatically. Default wrap + filename: /usr/local/trpc/bin/log_by_hour.log # Log file name, including path (relative or absolute), default to trpc.log + reserve_count: 5 # Output local log rolling file count, default 9 + hour_interval: 1 # Represents the hour segmentation interval, in hours, default interval is one hour +``` + + +#### Local Console Output +When the sink is set to "stdout", it means that the log is printed to the local console output. First, let's introduce its configuration items, as follows: +| Configuration item | Type | Required | Default value | Configuration explanation | +| :--- | :---: | :---: | :---: | :---: | +| format | string | Optional | Empty | Log output format, not filled in by default inherits logger | +| eol | bool | Optional | true | Whether to wrap when formatting output logs | +| stderr_level | int | Optional | 4 | Logs of this level and above are output to standard error output (stderr) | + +```yaml +plugins: + log: + default: + - name: custom # Can be the default default, can use other logger names + format: "[%Y-%m-%d %H:%M:%S.%e] [thread %t] [%l] [%@] %v" + sinks: + stdout: # Local console sink + eol: true # Whether to wrap each output automatically. Default wrap + stderr_level: 4 # The lowest level output to stderr, default is 4 (ERROR) +``` + +# Classic Scenario Usage Instructions +## Scenario 1: Separating business logs from framework logs, and customizing output for different business logs +Steps: +- Choose macro interface: Choose any of the specified logger log macros to print logs +- Add configuration: Complete logger and sink configuration. Logger configuration can specify format, mode, sink configuration can choose local, remote. + +## Scenario 6: How to initialize the log plugin in pure client mode and output the log to a file +Pure client: +In the pure client scenario, users need to output logs to a file and need to call the interface in their code to complete the initialization of the plugin. There are two ways here: +- Initialize all plugins: +``` +trpc::TrpcPlugin::GetInstance()->RegisterPlugins(); +``` +- Only need to initialize the log plugin +``` +trpc::TrpcPlugin::GetInstance()->InitLogging(); +``` +Note: The server-side framework will help complete the initialization of the log plugin when the service starts, so users don't need to worry about this. + +## Scenario 7: How to get the context when printing logs without context being transparently transmitted between business methods? +If no configuration is written or the log module has not been initialized, the logs will be output to the console: level < error will be output to std::cout, otherwise std::cerr. +To avoid excessive log output (such as trace, debug, etc.), by default, only logs with level >= info will be output. To support different user needs, users can define the TRPC_NOLOG_LEVEL macro to change the default behavior, which needs to be passed to the framework's log module. +For example, if you need to specify debug, you can try the following two ways: +- 1 Execute bazel test with the following option + > --copt=-DTRPC_NOLOG_LEVEL=1 +- 2 Write in the configuration file .bazelrc, so you don't have to manually specify it every time: 0-trace, 1-debug, 2-info, 3-warn, 4-error, 5-critical + 0-trace, 1-debug, 2-info, 3-warn, 4-error, 5-critical + > build --copt="-DTRPC_NOLOG_LEVEL=1" + +## Scenario 8: If the context is not transparently transmitted between business methods, how to get the context when printing logs? +The framework supports automatically setting the context to the thread's private variables (depending on the business configuration of the thread environment, the fiber environment is set to fiberLocal variables, and the ordinary thread environment is set to threadLocal variables), and provides two methods SetLocalServerContext() and GetLocalServerContext() for business to manually set or use context. The usage example is as follows: +``` +#include "trpc/server/server_context.h" +... + +::trpc::Status GreeterServiceImpl::SayHello(::trpc::ServerContextPtr context, + const ::trpc::test::helloworld::HelloRequest* request, + ::trpc::test::helloworld::HelloReply* reply) { + // If you use the future separation mode or are currently in a new thread/fiber manually started by the business, you need to set the context first + trpc::SetLocalServerContext(context); + // If you use fiber or future merge mode, the framework has set it up, no need to manually set context, you can use it directly + + // Do not pass context and enter other business methods + ExecBusiness(); + return ::trpc::kSuccStatus; +} + +void ExecBusiness() { + // Use context + trpc::ServerContextPtr ctx = trpc::GetLocalServerContext(); + TRPC_FMT_INFO("remote address: {}:{}", ctx->GetIp(), ctx->GetPort()); +} +``` diff --git a/docs/en/overview.md b/docs/en/overview.md index 732f52ce..12b7a6f4 100644 --- a/docs/en/overview.md +++ b/docs/en/overview.md @@ -25,7 +25,7 @@ You can use it: Conventional framework performance test data is only performance data in relatively simple scenarios, and does not represent good performance in real and different business scenarios. Considering that Tencent has many different business scenarios, the requirements for framework performance are also different, for example: - - business accesses gateway scenarios: the feature is that the business logic is light, hign qps, large number of connections (long/short connections), heavy network io operations, and asynchronous programming is often used for programming; + - business accesses gateway scenarios: the feature is that the business logic is light, high qps, large number of connections (long/short connections), heavy network io operations, and asynchronous programming is often used for programming; - recommendation/search scenarios: the feature is that the business logic is heavy, the qps is not large, each request needs to be calculated in parallel, pay attention to the long tail delay, and the programming often use synchronous programming; - game business scenarios: the feature is that logic very complex and has stateful, large qps, single-threaded programming, and use synchronous programming; - storage scenarios: the feature is that the business logic is light, large qps, low latency requirement, heavy network io and disk io operations, and asynchronous programming is often used for programming; diff --git a/docs/images/log_design.png b/docs/images/log_design.png new file mode 100644 index 0000000000000000000000000000000000000000..de526be51f468f4e21e2e52396d291594b3d20ef GIT binary patch literal 273450 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%0DXj2Z4O8yl4qKNGu9TDX= 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 Xe?0weqDFNN{5*P~dOu&@`1St)BA@m# literal 0 HcmV?d00001 diff --git a/docs/zh/local_logging.md b/docs/zh/local_logging.md new file mode 100644 index 00000000..fbc12b3d --- /dev/null +++ b/docs/zh/local_logging.md @@ -0,0 +1,403 @@ +[TOC] +# 1 前言 +日志是软件开发中的一个重要组成部分,好的日志是我们分析软件运行状态的一个重要信息来源。 tRPC-Cpp框架为业务提供了一套的日志打印,收集和上报的解决方案。通过本文的介绍,旨在为用户提供以下信息: + +- 框架提供了哪些日志功能? +- 框架如何实现这些功能的? +- 如何使用标准日志接口? +- 日志配置该如何配? + +术语: +- 实例: 等价logger,即多实例就是多logger +- flow风格: 使用TRPC_FLOW_LOG,TRPC_FLOW_LOG_EX两种日志宏的统称 + +# 功能介绍 +## 功能概述 + +如图所示,tRPC-Cpp 日志模块底层是基于SpdLog实现,它包括两方面的实现: `日志打印编程接口` 和 `与日志输出端对接` 。在实现中引入了Logger 和Sink 两个概念 +![architecture design](docs/images/arch_design.png) + +Logger和Sink分别负责日志打印和于日志服务系统对接,它们都采用了插件化编程,可定制化开发 ,用户可以参考[如何开发自定义日志插件](./custom_logging.md)。Logger 和Sink 的定义如下: +- Logger用于负责实现日志打印相关的通用接口,Logger采用插件化编程,支持多Logger功能,用户可以自行选择logger来实现差异化日志打印和收集。通过Sink插件和日志后端进行对接。 +- Sink又称为“日志输出端”,用于负责日志的收集上报功能,包括日志上报格式和与后端日志系统对接等。每个Logger都可以有多个Sink, 例如:Default这个默认的logger, 它可以支持同时输出到本地日志和远程CLS。Sink采用插件化编程,可灵活扩展。 + +框架提供了4种风格的日志打印函数: +- python 风格:最优雅,方便,推荐。[详细语法](https://fmt.dev/latest/syntax.html) +- prinrf 风格: printf语法,类型安全。[详细语法](https://en.wikipedia.org/wiki/Printf_format_string) +- stream 风格: 兼容旧版本,框架打印日志的方式,使用较为繁琐,不推荐用户使用 +- flow 风格: 它的底层沿用的是 stream风格,但可以支持传入context和指定logger。 推荐用于打印业务日志时与框架日志分开的场景。 + +## 日志打印接口 +首先框架参考业界标准对日志打印级别按由低到高的顺序进行了如下划分: +| 级别 | 描述 | +| :--- | :---: | +| **trace** | 该级别日志的主要作用是对系统特定事件的每一步的运行状态进行精确的记录| +| **debug** | 指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打印一些运行信息| +| **info**| 消息在粗粒度级别上突出强调应用程序的运行过程。打印一些你感兴趣的或者重要的信息,这个可以用于生产环境中输出程序运行的一些重要信息,但是不能滥用,避免打印过多的日志| +|**warn** |表明会出现潜在错误的情形,有些信息不是错误信息,但是也要给程序员一些提示 | +|**error** |指出虽然发生错误事件,但仍然不影响系统的继续运行。打印错误和异常信息,如果不想输出太多的日志,可以使用这个级别 | +| **critical**|指出每个严重的错误事件将会导致应用程序的退出。这个级别比较高了。重大错误,这种级别你可以直接停止程序了 | + +为照顾不同用户的使用习惯,框架为每个级别的日志函数提供了类似于 `python` 、 `printf` 、`stream` 、 `flow`四种风格的打印日志宏,此处举例只是让用户有个大概的了解,更详细的日志宏在下文介绍。 + +- 推荐使用:python 风格的日志宏,因为性能方面fmt::format要比std::ostream高20%左右。 + +``` +// python 风格 +TRPC_FMT_DEBUG("msg:{}", "test"); +// printf 风格 +TRPC_PRT_DEBUG("msg: %s", "test"); +// stream 风格 +TRPC_LOG_DEBUG("msg:" << "test"); +// flow 风格 +TRPC_FLOW_LOG_EX(ctx, "custom1", "msg:" << "test"); 可指定传入ctx和logger name +``` + +### 2.2.1 Default 日志宏接口 +- 宏接口说明:它使用了default logger, 且只有一个参数, 参数表示需要打印的日志内容。tRPC-Cpp框架日志都出于此。 +- 使用场景:框架日志, 调试日志 +```cpp + int i = 0; + // python-like + TRPC_FMT_TRACE("trpc-{}: {}", "cpp"); // trpc-cpp + TRPC_FMT_DEBUG("print floats {:03.2f}", 1.23456); // "print floats 001.23" + TRPC_FMT_INFO("hello trpc-{}: {}", "cpp", ++i); // "hello trpc-cpp: 2" + TRPC_FMT_ERROR("{} is smaller than {}?", 1, 2); // "1 is smaller than 2?" + TRPC_FMT_CRITICAL("coredump msg: {}?", "oom"); // "coredump msg: oom" + + // printf-like + TRPC_PRT_INFO("just like %s: %d", "printf", ++i); // "just like printf: 3" + ... + + // stream-like + TRPC_LOG_INFO("stream trace: " << ++i); // "stream trace: 1" + ... +``` +### 带Context的日志宏接口 +- 宏接口说明:它有2个参数, 第一个是context, 第二个为日志内容。需要注意的是,这里的context是ClientContext和ServerContext的基类, 所以在客户端和服务端都适用。 + +```cpp +TRPC_LOG_TRACE_EX(context, msg); +TRPC_LOG_DEBUG_EX(context, msg); +TRPC_LOG_INFO_EX(context, msg); +TRPC_LOG_WARN_EX(context, msg); +TRPC_LOG_ERROR_EX(context, msg); +TRPC_LOG_DEBUG_EX(context, msg); + +// 日志等级框架写死为info级别 +TRPC_FLOW_LOG_EX(context, instance, msg) +// 举例 +TRPC_FLOW_LOG_EX(ctx, "custom", "msg:" << "test") // ctx是上下文对象, custom是logger name, 输出:msg: test +``` +说明: +line 8: instance指的是logger的name, 用户可通过这个宏指定不同的logger, 并且也可获得context的信息, 接口更加灵活。 +line 9: 日志等级框架写死为info级别 ,用户如果想修改日志级别可以基于`TRPC_STREAM`来设置,也可自己用它来封一个日志宏,下面是TRPC_FLOW_LOG的实现 +``` +#define TRPC_FLOW_LOG(instance, msg) TRPC_STREAM(instance, trpc::Log::info, nullptr, msg) +#define TRPC_FLOW_LOG_EX(context, instance, msg) \ + TRPC_STREAM(instance, trpc::Log::info, context, msg) +``` + +### 2.2.3 指定logger的日志宏接口 +- 宏接口说明: 可以指定logger, 定制化日志输出方式。 +- 使用场景: +- 把业务日志和框架日志分离 +- 不同的业务日志指定不同的logger +- 业务日志输出到远程 + +上述场景任意一种,或者任意几种的组合都可以通过指定logger的日志宏接口实现。 +``` + // flow风格的宏 + TRPC_FLOW_LOG(instance, msg) + TRPC_FLOW_LOG_EX(context, instance, msg) + // 举例 + TRPC_FLOW_LOG("custom1", "hello" << "trpc") // hello trpc + TRPC_FLOW_LOG_EX("server_context", "custom2", "hello" << "trpc") // hello trpc + + // fmt风格定义宏接口 + TRPC_LOGGER_FMT_TRACE(instance, format, args...) + TRPC_LOGGER_FMT_DEBUG(instance, format, args...) + TRPC_LOGGER_FMT_INFO(instance, format, args...) + TRPC_LOGGER_FMT_WARN(instance, format, args...) + TRPC_LOGGER_FMT_ERROR(instance, format, args...) + TRPC_LOGGER_FMT_CRITICAL(instance, format, args...) + // 举例 + TRPC_LOGGER_FMT_WARN("custom3", "i am not {} logger", "default"); // "i am not default logger" +``` + +### 带IF条件的日志宏接口 +- 宏接口说明:带条件的日志宏,即当条件满足时,则输出日志,否则不输出 +- 使用场景 1:日志只有满足自定义的条件才输出 +``` + // fmt风格 + TRPC_FMT_TRACE_IF(condition, format, args...) + TRPC_FMT_DEBUG_IF(condition, format, args...) + TRPC_FMT_INFO_IF(condition, format, args...) + TRPC_FMT_WARN_IF(condition, format, args...) + TRPC_FMT_ERROR_IF(condition, format, args...) + TRPC_FMT_CRITICAL_IF(condition, format, args...) + // 举例 + TRPC_FMT_INFO_IF(true, "if true, print: {}", "msg"); // "if true, print: msg" + + // printf风格 + TRPC_PRT_TRACE_IF(condition, format, args...) + TRPC_PRT_DEBUG_IF(condition, format, args...) + TRPC_PRT_INFO_IF(condition, format, args...) + TRPC_PRT_WARN_IF(condition, format, args...) + TRPC_PRT_ERROR_IF(condition, format, args...) + TRPC_PRT_CRITICAL_IF(condition, format, args...) + // 举例 + TRPC_PRT_INFO_IF(true, "if true, print: %s", "msg"); // "if true, print: msg" + + // stream风格 + TRPC_LOG_TRACE_IF(condition, msg) + TRPC_LOG_DEBUG_IF(condition, msg) + TRPC_LOG_INFO_IF(condition, msg) + TRPC_LOG_WARN_IF(condition, msg) + TRPC_LOG_ERROR_IF(condition, msg) + TRPC_LOG_CRITICAL_IF(condition, msg) + // 举例 + TRPC_LOG_INFO_IF(true, "if true, print: " << "msg"); // "if true, print: msg" + + // 以上所有的宏接口也可以和LOGGER/Context配合使用,例如: + TRPC_LOGGER_FMT_INFO_IF(true, "if true, print: {}", "msg"); // "if true, print: msg" + TRPC_LOGGER_PRT_INFO_EX(context, true, "if true, print: %s", "msg"); // "if true, print: msg" + TRPC_LOGGER_LOG_INFO_IF_EX(context, true, "if true, print: " << "msg"); // "if true, print: msg" +``` +- 使用场景 2:用户希望输出日志但又不希望输出过多导致性能下降。 +这种场景下可使用 条件宏算子 +- TRPC_EVERY_N(c) :设置本条日志每触发c次至多输出打印1次,第一次必定触发。 +- TRPC_WITHIN_N(ms):设置为本条日志在设定的ms毫秒内若存在多次触发,则至多只输出1次,第一次必定触发。使用示例如下 +``` +TRPC_FMT_INFO_IF(TRPC_EVERY_N(1000), "condition every 1000"); # 每1000次调用打印一次日志 +TRPC_FMT_INFO_IF(TRPC_WITHIN_N(1000), "condition within 1000 ms"); # 每1000ms时间内若触发一次以上调用,则打印至多一次日志 +``` + +## 多logger支持 +tRPC-Cpp支持同时存在多个logger,每个logger设置不同的日志级别,打印格式,上报输出后端,业务可以为不同的业务场景设置不同的logger。比如 + +- 不同的业务模块使用不同的日志文件存储 +- 不同的事件,基于事件的关注度不同,采用不同的日志级别收集日志 + +多Logger功能大大增加了日志使用的灵活性。 + +## 多sink支持 +对于同一个logger,框架也提供了日志同时输出到多个日志输出后端(简称 “sink”)的能力。 因为sink也是以插件的方式注册到框架的,所以用户可选本地,远程(比如 CLS,智研日志等),或者一个都不选。目前框架支持4种输出端(Sink): +- 本地滚动文件(LocalFileSink):配置名字为 `local_file` +- 本地控制台输出(StdoutSink):配置名字为 `stdout` + 上述sink分属2种不同的类型: +- DefaultSink: + - 上述 LocalFileSink、StdoutSink 即是。 + - 配置写在 sinks 字段下面。 + - 要求返回一个 spdsink。 + - 归属于一个实例的所有 DefaultSink,由于都挂接在 DefaultLog 内置的spdlogger中,于是接收的消息是一样的 +- RawSink + - 上述 CLSLogSink 即是。 + - 配置写在 raw_sinks下面。 + - 要求实现一个 log 接口,额外接收 context 参数,由 DefaultLog 同步调用,其线程安全性也需要其自己保证。 + - 其行为完全由其自己定义,目前 CLSLogSink 会在内部新建一个 spdlogger 和一个 spdsink,然后根据 context 决定如何输出。 + +这里需要强调的是:日志的打印设置是以Sink粒度来配置的。用户需要为每个输出端做配置,比如:同一份日志即需要保存在本地日志文件,又要输出到cls, 那就必须要分别配置local_file和cls_log这两个sink。 + +# 日志配置 +## 配置结构 +首先我们来看看日志配置的总体结构。 由于日志模块对于logger和sink的实现都是采用插件的方式来实现的,所以日志配置都必须要放到“plugins”区域内。 +```yaml +plugins: + log: + default: + - name: default # 默认logger名 + ... + sinks: # DefaultSink类型插件 + local_file: # 本地日志的sink + ... + raw_sinks: # RawSink类型插件 + cls_log: # cls日志的sink + - name: custom1 # 自定义logger名字 + ... + sinks: + local_file: + ... + raw_sinks: + cls_log: +``` +说明: +- 上面的配置体现了多logger和多sink功能。“default”,“custom1”表示logger的名称。每个logger的配置是一个sink的数组。 +- line 4: defaul表示框架默认logger +- line 6: sinks表示配置中放的是DefaultSink类型的插件, 比如local_file +- line 9: raw_sink表示配置中放的是RawtSink类型的插件, 比如cls_log + +## logger配置 +logger的配置通常是方便其管理的sink直接继承, 因此sink中有些字段可以不做配置,比如format,这样可以简化配置。先介绍下它的参数配置,设计如下。 +|配置项 | 类型 | 是否必填 | 默认值 |配置解释| +| :--- | :---: | :---: | :---: | :---: | +| name | string | 可选 | 空 | logger名 | +| min_level | int | 可选 | 2 | 设置的最小日志级别, 只有日志级别大于它时,日志才会输出 | +| format | string | 可选 | 空 | [%Y-%m-%d %H:%M:%S.%e] [thread %t] [%l] [%@] %v | +| mode | int | 可选 | 2 | 可选:1 同步,2 异步 3 极速 | + +说明: +format: 参考 [格式说明](https://github.com/gabime/spdlog/wiki/3.-Custom-formatting) +mode: +- 异步:打印日志时,把日志存入一个线程安全的缓存队列后直接返回。内部有独立线程 消费此队列,输出到各个输出端。如果队列满,则输出阻塞,如果队列空,则消费阻塞。**推荐使用方式**。 +- 同步:打印日志时,直接遍历各个输出端并等待完成, 阻塞方式; + +- 极速: 和异步模式基本相同,唯一区别在于输出从不阻塞,一旦队列满,则直接丢弃最旧的日志,然后存入当前日志并返回 + +``` +plugins: + log: + default: + - name: default + min_level: 1 # 0-trace, 1-debug, 2-info, 3-warn, 4-error, 5-critical + format: "[%Y-%m-%d %H:%M:%S.%e] [thread %t] [%l] [%@] [%!] %v" + mode: 2 # 1-同步, 2-异步, 3-极速 + sinks: + ... +``` + +## sink配置 +### 使用本地日志 +#### 本地文件日志 +当sink设置为“local_file”时,代表日志打本地日志文件。先介绍下它的配置项如下。 +|配置项 | 类型 | 是否必填 | 默认值 |配置解释| +| :--- | :---: | :---: | :---: | :---: | +| format | string | 可选 | 空 | 日志输出格式,不填则默认继承logger的 | +| eol | bool | 可选 | true | 格式化输出日志时是否换行 | +| filename | string | 必填 | 空 | 本地日志文件名,默认为当前路径,可带路径 | +| roll_type | string | 可选 | by_size | 设置日志分割方式,默认为by_size, 可选by_day-按天分割, by_hour-按小时分割| +| reserve_count | int | 可选 | 10 | 滚动日志保留的文件个数 | +| roll_size | int | 可选 | 100 x 1024 x 1024 | by_size类型才设置此变量, 表示一个滚动文件的大小 | +| rotation_hour | int | 可选 | 0 | by_day类型才设置此变量,表示按天切割的时刻,具体是时刻通过rotation_hour:rotation_minute指定| +| rotation_minute | int | 可选 | 0 | | +| remove_timout_file_switch | bool | 可选 | false | by_hour类型才设置此变量,按天分割模式下, 删除过时文件的标识 | +| hour_interval | int | 可选 | 1 | by_hour类型才设置此变量, 表示小时分割的间隔,单位为小时| + +本地日志文件输出支持三种输出模式: +- 按大小:by_size +- 按天:by_day +- 按小时:by_hour + +下面分别介绍如何配置 +##### 按大小输出模式 +```yaml +plugins: + log: + default: + - name: custom # 可以默认的default,可以使用其他的logger名 + format: "[%Y-%m-%d %H:%M:%S.%e] [thread %t] [%l] [%@] %v" + sinks: + local_file: # 本地日志的sink + roll_type: by_size # 输出本地日志模式 + eol: true # 每次输出是否自动换行。默认换行 + filename: /usr/local/trpc/bin/log_by_size.log # 日志文件名,包含路径(相对或绝对路径), 默认为trpc.log + roll_size: 10000 # 输出单个文件大小,默认100M + reserve_count: 5 # 输出本地日志滚动文件个数,默认9个 +``` +##### 按天输出模式 +```yaml +plugins: + log: + default: + - name: custom # 可以默认的default,可以使用其他的logger名 + format: "[%Y-%m-%d %H:%M:%S.%e] [thread %t] [%l] [%@] %v" + sinks: + local_file: # 本地日志的sink + roll_type: by_day # 按天输出本地日志模式 + eol: true # 每次输出是否自动换行。默认换行 + filename: /usr/local/trpc/bin/log_by_day.log # 日志文件名,包含路径(相对或绝对路径), 默认为trpc.log + reserve_count: 5 # 输出本地日志滚动文件个数,默认9个 + rotation_hour: 0 # 表示按天切割的时刻,具体是时刻通过rotation_hour:rotation_minute指定 + rotation_minute: 0 + remove_timout_file_switch: false # 按天分割模式下,删除过时文件的标识, 默认不删除 +``` + +##### 按小时输出模式 +```yaml +plugins: + log: + default: + - name: custom # 可以默认的default,可以使用其他的logger名 + format: "[%Y-%m-%d %H:%M:%S.%e] [thread %t] [%l] [%@] %v" + sinks: + local_file: # 本地日志的sink + roll_type: by_hour # 按小时输出本地日志模式 + eol: true # 每次输出是否自动换行。默认换行 + filename: /usr/local/trpc/bin/log_by_hour.log # 日志文件名,包含路径(相对或绝对路径), 默认为trpc.log + reserve_count: 5 # 输出本地日志滚动文件个数,默认9个 + hour_interval: 1 # 表示小时分割的间隔,单位为小时,默认间隔是一小时 +``` + +#### 本地控制台输出 +当sink设置为"stdout"时,代表日志打本地控制台输出。先介绍下它的[参数配置](https://git.woa.com/trpc-cpp/trpc-cpp/blob/master/trpc/common/config/stdout_sink_conf.h),设计如下。 +|配置项 | 类型 | 是否必填 | 默认值 |配置解释| +| :--- | :---: | :---: | :---: | :---: | +| format | string | 可选 | 空 | 日志输出格式,不填则默认继承logger的 | +| eol | bool | 可选 | true | 格式化输出日志时是否换行 | +| stderr_level | int | 可选 | 4 | 该级别及以上的日志输出到标准错误输出(stderr) | + +```yaml +plugins: + log: + default: + - name: custom # 可以默认的default,可以使用其他的logger名 + format: "[%Y-%m-%d %H:%M:%S.%e] [thread %t] [%l] [%@] %v" + sinks: + stdout: # 本地控制台的sink + eol: true # 每次输出是否自动换行。默认换行 + stderr_level: 4 # 输出到stderr的最低等级,默认为4(ERROR) +``` + +# 经典场景使用说明 +## 场景1: 业务日志与框架日志分离,不同的业务日志需定制化输出 +步骤: +- 选择宏接口:选择 `指定logger的日志宏`中的任意一种来打印日志 +- 添加配置:完成logger,sink的配置。其中logger配置可以指定format, mode, sink配置可以选择本地,远程。 + +## 场景6:纯客户端模式下如何把初始化日志插件并把日志输出到文件中 +纯客户端: +用户在纯客户端的场景下需要把日志输出到文件,需要自己在代码中调用接口完成插件的初始化。 这里也分为两种方式: +- 初始化全部的插件: +``` +trpc::TrpcPlugin::GetInstance()->RegisterPlugins(); +``` +- 只需要初始化日志插件 +``` +trpc::TrpcPlugin::GetInstance()->InitLogging(); +``` +说明:服务端在服务启动的时候框架会帮完成日志插件的初始化,所以用户不用管这块。 + +## 场景7:单测或者客户端没有配置日志插件,如何把trpc的log日志输出到终端? +如果不写配置,或者日志模块还未初始化,那么日志将输出到控制台:`level < error` 将会输出到 std::cout,否则 std::cerr。 +为了避免过多的日志输出(如trace、debug等),默认情况下,只有 `level >= info` 的日志才会输出。为了支持不同用户的需求,用户可以定义宏`TRPC_NOLOG_LEVEL`改变默认行为,这个宏需要传递给框架的日志模块。 +例如,你需要指定为 debug,有如下两种方式可以试下 +- 1 执行bazel test时加上 下面这个选项 + > --copt=-DTRPC_NOLOG_LEVEL=1 +- 2 “在写在配置文件 .bazelrc 中,这样就不用每次手动指定了: + 0-trace, 1-debug, 2-info, 3-warn, 4-error, 5-critical + > build --copt="-DTRPC_NOLOG_LEVEL=1" + +## 场景8:context没有在业务方法之间透传,如何在打印日志时获取到context? +框架支持自动把context设置到线程的私有变量中(根据业务配置线程环境的不同,fiber环境设置到fiberLocal变量中,普通线程环境设置到threadLocal变量中),并提供了SetLocalServerContext()和GetLocalServerContext()两个方法供业务手动设置或取用context,使用示例如下: +``` +#include "trpc/server/server_context.h" +... + +::trpc::Status GreeterServiceImpl::SayHello(::trpc::ServerContextPtr context, + const ::trpc::test::helloworld::HelloRequest* request, + ::trpc::test::helloworld::HelloReply* reply) { + // 如果采用future分离模式或者当前处于业务手动起的新线程/fiber里,需要先设置一次context + trpc::SetLocalServerContext(context); + // 如果采用fiber或者future合并模式,框架已经设置好,无需手动设置context,可以直接取用 + + // 不透传context并进入到其他业务方法 + ExecBusiness(); + return ::trpc::kSuccStatus; +} + +void ExecBusiness() { + // 取用context + trpc::ServerContextPtr ctx = trpc::GetLocalServerContext(); + TRPC_FMT_INFO("remote address: {}:{}", ctx->GetIp(), ctx->GetPort()); +} +``` diff --git a/trpc/config/BUILD b/trpc/config/BUILD index d19360cd..447d590a 100644 --- a/trpc/config/BUILD +++ b/trpc/config/BUILD @@ -136,3 +136,13 @@ cc_test( "@com_google_googletest//:gtest_main", ], ) + +cc_test( + name = "config_test", + srcs = ["config_test.cc"], + deps = [ + "//trpc/config/testing:mock_config", + "@com_google_googletest//:gtest", + "@com_google_googletest//:gtest_main", + ], +) \ No newline at end of file diff --git a/trpc/config/config.h b/trpc/config/config.h index b39ecefe..d0b87618 100644 --- a/trpc/config/config.h +++ b/trpc/config/config.h @@ -22,7 +22,7 @@ namespace trpc { /// @brief The tRPC Config plugin abstract interface definition class, targeting plugin developers. -/// @note This class is reserved for 1.0 compatibility, and new data sources (rainbow, etcd, local cache) +/// @note This class is reserved for 1.0 compatibility, and new data sources /// should inherit provider_base.h directly. class Config : public Plugin { public: @@ -31,15 +31,15 @@ class Config : public Plugin { ~Config() override = default; /// @brief Pulls file configuration. - /// @param config_name - For tconf, pass in the configuration file name; for rainbow, pass in the group_name. + /// @param config_name - Group_name. /// @param config - The content of the obtained configuration. - /// @param params - For tconf, this parameter is not required; for rainbow, pass in the file name. + /// @param params - File name. /// @return - true: Loading successful. /// false: Loading failed. virtual bool PullFileConfig(const std::string& config_name, std::string* config, const std::any& params) = 0; /// @brief Pulls a single key-value configuration. - /// @param config_name - The filename of the KV configuration to be loaded, for rainbow pass in the group. + /// @param config_name - The filename of the KV configuration to be loaded, means group. /// @param key - Input key. /// @param config - Obtains the value corresponding to the key. /// @return - true: Loading successful. @@ -48,7 +48,7 @@ class Config : public Plugin { const std::any& params) = 0; /// @brief Pulls multiple key-value configurations. - /// @param config_name - The filename of the KV configuration to be loaded, for rainbow pass in the group. + /// @param config_name - The filename of the KV configuration to be loaded, means group. /// @param config - Obtains key-value pairs. /// @return - true: Loading successful. /// false: Loading failed. diff --git a/trpc/config/config_test.cc b/trpc/config/config_test.cc new file mode 100644 index 00000000..54fe5fb1 --- /dev/null +++ b/trpc/config/config_test.cc @@ -0,0 +1,106 @@ +// +// +// Tencent is pleased to support the open source community by making tRPC available. +// +// Copyright (C) 2023 THL A29 Limited, a Tencent company. +// All rights reserved. +// +// If you have downloaded a copy of the tRPC source code from Tencent, +// please note that tRPC source code is licensed under the Apache 2.0 License, +// A copy of the Apache 2.0 License is included in this file. +// +// + +#include +#include +#include + +#include "gtest/gtest.h" +#include "gmock/gmock.h" +#include "trpc/config/testing/mock_config.h" + +namespace trpc::testing { + +class AnyEqMatcher : public ::testing::MatcherInterface { + public: + explicit AnyEqMatcher(const std::any& expected) : expected_(expected) {} + + bool MatchAndExplain(const std::any& actual, ::testing::MatchResultListener* listener) const override { + if (!actual.has_value() && !expected_.has_value()) { + return true; + } + + if (actual.type() != expected_.type()) { + return false; + } + + if (actual.type() == typeid(int)) { + return std::any_cast(actual) == std::any_cast(expected_); + } else if (actual.type() == typeid(std::string)) { + return std::any_cast(actual) == std::any_cast(expected_); + } + + return false; + } + + void DescribeTo(::std::ostream* os) const override { + *os << "is equal to the expected value"; + } + + void DescribeNegationTo(::std::ostream* os) const override { + *os << "is not equal to the expected value"; + } + + private: + const std::any expected_; +}; + +inline ::testing::Matcher AnyEq(const std::any& expected) { + return ::testing::MakeMatcher(new AnyEqMatcher(expected)); +} + +class TestConfig : public ::testing::Test { + protected: + void SetUp() override { + mock_config_ = MakeRefCounted(); + ASSERT_TRUE(mock_config_ != nullptr); + } + + RefPtr mock_config_; +}; + +TEST_F(TestConfig, PullFileConfig) { + std::string config_name = "test_config"; + std::string config; + std::any params; + EXPECT_CALL(*mock_config_, PullFileConfig(config_name, &config, AnyEq(params))) + .WillOnce(::testing::Return(true)); + bool result = mock_config_->PullFileConfig(config_name, &config, params); + + ASSERT_TRUE(result); +} + +TEST_F(TestConfig, PullKVConfig) { + std::string config_name = "test_config"; + std::string key = "test_key"; + std::string config; + std::any params; + EXPECT_CALL(*mock_config_, PullKVConfig(config_name, key, &config, AnyEq(params))) + .WillOnce(::testing::Return(true)); + bool result = mock_config_->PullKVConfig(config_name, key, &config, params); + + ASSERT_TRUE(result); +} + +TEST_F(TestConfig, PullMultiKVConfig) { + std::string config_name = "test_config"; + std::map config; + std::any params; + EXPECT_CALL(*mock_config_, PullMultiKVConfig(config_name, &config, AnyEq(params))) + .WillOnce(::testing::Return(true)); + bool result = mock_config_->PullMultiKVConfig(config_name, &config, params); + + ASSERT_TRUE(result); +} + +} // namespace trpc::testing diff --git a/trpc/config/default/loader.cc b/trpc/config/default/loader.cc index a83ff0db..9b79fc36 100644 --- a/trpc/config/default/loader.cc +++ b/trpc/config/default/loader.cc @@ -78,18 +78,18 @@ ProviderPtr GetProvider(const std::string& instance_name) { } // namespace detail LoadOptions WithCodec(const std::string& name) { - return LoadOptions([name = std::move(name)](DefaultConfigPtr& config) { + return LoadOptions([name](DefaultConfigPtr& config) { config::CodecPtr codec = CodecFactory::GetInstance()->Get(name); TRPC_ASSERT(codec != nullptr && "Codec not found!"); - (*config).SetCodec(codec); + config->SetCodec(codec); }); } LoadOptions WithProvider(const std::string& name) { - return LoadOptions([name = std::move(name)](DefaultConfigPtr& config) { + return LoadOptions([name](DefaultConfigPtr& config) { config::ProviderPtr provider = ProviderFactory::GetInstance()->Get(name); TRPC_ASSERT(provider != nullptr && "Provider not found!"); - (*config).SetProvider(provider); + config->SetProvider(provider); }); } diff --git a/trpc/config/default/loader_test.cc b/trpc/config/default/loader_test.cc index 92c0ec3a..ddab5e39 100644 --- a/trpc/config/default/loader_test.cc +++ b/trpc/config/default/loader_test.cc @@ -1,3 +1,16 @@ +// +// +// Tencent is pleased to support the open source community by making tRPC available. +// +// Copyright (C) 2023 THL A29 Limited, a Tencent company. +// All rights reserved. +// +// If you have downloaded a copy of the tRPC source code from Tencent, +// please note that tRPC source code is licensed under the Apache 2.0 License, +// A copy of the Apache 2.0 License is included in this file. +// +// + #include "trpc/config/default/loader.h" #include "gtest/gtest.h" @@ -56,22 +69,23 @@ TEST_F(TestLoader, LoadSuccessful) { TEST_F(TestLoader, LoadUnsuccessful) { std::string invalid_configuration_path = "path/to/your/invalid/configuration/file"; - EXPECT_DEATH(config::DefaultConfigPtr cfg = config::detail::Load( - invalid_configuration_path, - {config::WithCodec("UnknownCodecPlugin"), config::WithProvider("UnknownProviderPlugin")}), - "assertion failed: codec != nullptr && \"Codec not found!\""); + // Both codec and provider are not registered + EXPECT_DEATH(config::detail::Load(invalid_configuration_path, + {config::WithCodec("UnknownCodecPlugin"), + config::WithProvider("UnknownProviderPlugin")}), + "Codec not found!"); // codec is correct, but provider is not registered - EXPECT_DEATH(config::DefaultConfigPtr cfg = config::detail::Load( - invalid_configuration_path, - {config::WithCodec("TestCodecPlugin"), config::WithProvider("UnknownProviderPlugin")}), - "assertion failed: provider != nullptr && \"Provider not found!\""); + EXPECT_DEATH(config::detail::Load(invalid_configuration_path, + {config::WithCodec("TestCodecPlugin"), + config::WithProvider("UnknownProviderPlugin")}), + "Provider not found!"); - // codec is correct, but provider is not registered - EXPECT_DEATH(config::DefaultConfigPtr cfg = config::detail::Load( - invalid_configuration_path, - {config::WithCodec("UnknownCodecPlugin"), config::WithProvider("TestProviderPlugin")}), - "assertion failed: codec != nullptr && \"Codec not found!\""); + // codec is not registered, but provider is correct + EXPECT_DEATH(config::detail::Load(invalid_configuration_path, + {config::WithCodec("UnknownCodecPlugin"), + config::WithProvider("TestProviderPlugin")}), + "Codec not found!"); } } // namespace trpc::testing diff --git a/trpc/config/testing/BUILD b/trpc/config/testing/BUILD index a369b130..f07e0a57 100644 --- a/trpc/config/testing/BUILD +++ b/trpc/config/testing/BUILD @@ -11,6 +11,14 @@ exports_files([ "test_load.toml", ]) +cc_library( + name = "mock_config", + hdrs = ["mock_config.h"], + deps = [ + "//trpc/config:config", + ], +) + cc_library( name = "config_plugin_testing", hdrs = ["config_plugin_testing.h"], diff --git a/trpc/config/testing/mock_config.h b/trpc/config/testing/mock_config.h new file mode 100644 index 00000000..2f3fb0b5 --- /dev/null +++ b/trpc/config/testing/mock_config.h @@ -0,0 +1,46 @@ +// +// +// Tencent is pleased to support the open source community by making tRPC available. +// +// Copyright (C) 2023 THL A29 Limited, a Tencent company. +// All rights reserved. +// +// If you have downloaded a copy of the tRPC source code from Tencent, +// please note that tRPC source code is licensed under the Apache 2.0 License, +// A copy of the Apache 2.0 License is included in this file. +// +// + +#pragma once + +#include "gmock/gmock.h" +#include "trpc/config/config.h" + +namespace trpc::testing { + +class MockConfig : public trpc::Config { + public: + MOCK_METHOD(bool, PullFileConfig, + (const std::string& config_name, std::string* config, const std::any& params), + (override)); + + MOCK_METHOD(bool, PullKVConfig, + (const std::string& config_name, const std::string& key, std::string* config, + const std::any& params), + (override)); + + MOCK_METHOD(bool, PullMultiKVConfig, + (const std::string&, (std::map*), const std::any&), (override)); + + MOCK_METHOD(void, SetAsyncCallBack, (const std::any& param), (override)); + + PluginType Type() const override { + return PluginType::kConfig; + } + + std::string Name() const override { + return "MockConfig"; + } +}; + +} // namespace trpc::testing \ No newline at end of file diff --git a/trpc/config/trpc_conf.h b/trpc/config/trpc_conf.h index 7b4de5c5..a9976a6c 100644 --- a/trpc/config/trpc_conf.h +++ b/trpc/config/trpc_conf.h @@ -37,8 +37,8 @@ void Destroy(); /// Example usage: /// @code{.cpp} -/// auto db_cfg = trpc::config::Load("test.yaml", trpc::config::WithCodec("yaml"), -/// trpc::config::WithProvider("rainbow1")); std::string username = db_cfg.GetString("username", "trpc-db1"); +/// auto db_cfg = trpc::config::Load("test.yaml", trpc::config::WithCodec("yaml"); +/// trpc::config::WithProvider("my_provider1")); std::string username = db_cfg.GetString("username", "trpc-db1"); /// std::string password = db_cfg.GetString("password", "123456"); /// @endcode template diff --git a/trpc/config/trpc_conf_compatible.h b/trpc/config/trpc_conf_compatible.h index 9296d7c6..e1eb5b29 100644 --- a/trpc/config/trpc_conf_compatible.h +++ b/trpc/config/trpc_conf_compatible.h @@ -30,9 +30,9 @@ namespace trpc::config { /// This method is provided for compatibility with the legacy framework configuration loading method, /// but is not recommended for use. /// Usage: first get the configuration content, then use the specific interface to parse it: -/// For example, auto yaml_result = trpc::config::Loadconfig(rainbow, myconf.conf); +/// For example, auto yaml_result = trpc::config::LoadConfig(my_provider, myconf.conf); /// @brief Fetches the configuration from the configuration center. -/// @param plugin_name (old)The name of the configuration plugin, like rainbow. +/// @param plugin_name (old)The name of the configuration plugin. /// @param config_name (old)The name of the configuration file to be loaded. /// @param params Any type of expandable parameters. /// @return Returns the configuration in the format of the template type T, such as Json::Value or std::map. diff --git a/trpc/config/trpc_conf_deprecated.h b/trpc/config/trpc_conf_deprecated.h index a7ca89fb..b0db4099 100644 --- a/trpc/config/trpc_conf_deprecated.h +++ b/trpc/config/trpc_conf_deprecated.h @@ -28,7 +28,7 @@ class TrpcConf { public: /// @brief Loads the text configuration of a file type /// @param plugin_name The name of the configuration plugin - /// @param config_name The name of the configuration file, "group" for rainbow and the configuration name for tconf + /// @param config_name The Group name /// @param result The loaded text configuration content /// @param params The configuration request information /// @return bool true: if the configuration is loaded successfully @@ -54,7 +54,7 @@ class TrpcConf { /// @brief Loads all key-value pairs of a kv type configuration /// @param plugin_name The name of the configuration plugin - /// @param config_name The name of the kv configuration file, "group" for rainbow and the configuration name for tconf + /// @param config_name The Group name /// @param result The loaded key-value pairs content /// @param params The configuration request information /// @return bool true: if the configuration is loaded successfully @@ -79,7 +79,7 @@ class TrpcConf { /// @brief Loads a single key-value pair of a kv type configuration /// @param plugin_name The name of the configuration plugin - /// @param config_name The name of the kv configuration file, "group" for rainbow and the configuration name for tconf + /// @param config_name The Group name /// @param key The name of the key to be loaded /// @param result The loaded value of the specified key /// @param params The configuration request information diff --git a/trpc/util/log/default/default_log.cc b/trpc/util/log/default/default_log.cc index cd06f1e9..f4de24c8 100644 --- a/trpc/util/log/default/default_log.cc +++ b/trpc/util/log/default/default_log.cc @@ -53,6 +53,18 @@ bool DefaultLog::ShouldLog(const char* instance_name, Level level) const { return level >= instance.config.min_level; } +bool DefaultLog::ShouldLog(Level level) const { + if (!inited_) { + std::cerr << "DefaultLog not inited" << std::endl; + return false; + } + if (!inited_trpc_logger_instance_) { + std::cout<<"not inited!"<= trpc_logger_instance_.config.min_level; +} + void DefaultLog::LogIt(const char* instance_name, Level level, const char* filename_in, int line_in, const char* funcname_in, std::string_view msg, const std::unordered_map& filter_data) const { @@ -60,19 +72,30 @@ void DefaultLog::LogIt(const char* instance_name, Level level, const char* filen std::cerr << "DefaultLog not inited" << std::endl; return; } - auto iter = instances_.find(instance_name); - if (iter == instances_.end()) { - std::cerr << "DefaultLog instance" << instance_name << " does not exit" << std::endl; - return; + + const DefaultLog::Logger* instance = nullptr; + // It is preferred if it is the output of the tRPC-Cpp framework log + if (!strcmp(instance_name, kTrpcLogCacheStringDefault)) { + if (inited_trpc_logger_instance_ == false) { + std::cerr << "DefaultLog instance:" << kTrpcLogCacheStringDefault << "does not exit" << std::endl; + return ; + } + instance = &trpc_logger_instance_; + } else { + auto iter = instances_.find(instance_name); + if (iter == instances_.end()) { + std::cerr << "DefaultLog instance: " << instance_name << " does not exit" << std::endl; + return; + } + instance = &iter->second; } - const auto& instance = iter->second; - if (instance.logger) { - instance.logger->log(spdlog::source_loc{filename_in, line_in, funcname_in}, SpdLevel(level), msg); + if (instance->logger) { + instance->logger->log(spdlog::source_loc{filename_in, line_in, funcname_in}, SpdLevel(level), msg); } // Output to a remote plugin (if available) - for (const auto& sink : instance.raw_sinks) { + for (const auto& sink : instance->raw_sinks) { sink->Log(level, filename_in, line_in, funcname_in, msg, filter_data); } } @@ -108,6 +131,9 @@ std::pair DefaultLog::SetLevel(const char* instance_name, Leve auto old = static_cast(instance.config.min_level); instance.config.min_level = static_cast(level); + if (!strcmp(instance_name, kTrpcLogCacheStringDefault)) { + trpc_logger_instance_.config.min_level = static_cast(level); + } return std::make_pair(old, true); } diff --git a/trpc/util/log/default/default_log.h b/trpc/util/log/default/default_log.h index 07fb0542..2be9b3d5 100644 --- a/trpc/util/log/default/default_log.h +++ b/trpc/util/log/default/default_log.h @@ -76,6 +76,11 @@ class DefaultLog : public Log { /// @return true/false bool ShouldLog(const char* instance_name, Level level) const override; + /// @brief Determine whether the log level of the tRPC-Cpp framework instance meets the requirements for printing this log. + /// @param level Log instance level + /// @return true/false + bool ShouldLog(Level level) const override; + /// @brief Output log to a sink instance. void LogIt(const char* instance_name, Level level, const char* filename_in, int line_in, const char* funcname_in, std::string_view msg, const std::unordered_map& filter_data = {}) const override; @@ -108,6 +113,11 @@ class DefaultLog : public Log { // Add the new sink to the logger's sinks instance.logger->sinks().push_back(sink->SpdSink()); + // The tRPC-Cpp framework logging instance has been configured + if (!strcmp(logger_name, "default")) { + inited_trpc_logger_instance_ = true; + trpc_logger_instance_ = instance; + } return true; } @@ -148,6 +158,13 @@ class DefaultLog : public Log { // Initialization flags bool inited_{false}; + // Whether the tRPC-Cpp framework logging instance is configured + // If false, all framework logging will be logged to the console + bool inited_trpc_logger_instance_{false}; + + // tRPC-Cpp framework logger instance + DefaultLog::Logger trpc_logger_instance_; + // Collection of log instances std::unordered_map instances_; }; diff --git a/trpc/util/log/default/default_log_test.cc b/trpc/util/log/default/default_log_test.cc index 036a960e..ce93cdfb 100644 --- a/trpc/util/log/default/default_log_test.cc +++ b/trpc/util/log/default/default_log_test.cc @@ -42,8 +42,8 @@ class DefaultLogTest : public ::testing::Test { DefaultLogPtr default_log_; }; -// Test case for ShouldLog method -TEST_F(DefaultLogTest, ShouldLogTest) { +// Test case for ShouldLog method with instance_name and level +TEST_F(DefaultLogTest, ShouldLogTestWithInstanceNameAndLevel) { const char* kInstance = "default"; Log::Level level = Log::info; @@ -51,6 +51,14 @@ TEST_F(DefaultLogTest, ShouldLogTest) { ASSERT_TRUE(should_log); } +// Test case for ShouldLog method with level +TEST_F(DefaultLogTest, ShouldLogTestWithLevel) { + Log::Level level = Log::info; + + bool should_log = default_log_->ShouldLog(level); + ASSERT_TRUE(should_log); +} + // Test case for GetLevel method TEST_F(DefaultLogTest, GetLevelTest) { const char* kInstance = "default"; @@ -71,16 +79,27 @@ TEST_F(DefaultLogTest, SetLevelTest) { ASSERT_EQ(default_log_->GetLevel(kInstance).first, new_level); } -// Test case for LogIt method -TEST_F(DefaultLogTest, LogItTest) { - const char* kInstance = "default"; +// Test case for LogIt method with default instance_name +TEST_F(DefaultLogTest, LogItTestWithDefaultInstanceName) { + const char* kInstance = kTrpcLogCacheStringDefault; + Log::Level level = Log::info; + const char* filename = "test_file"; + int line = 42; + const char* funcname = "test_func"; + std::string msg = "Test message"; + + default_log_->LogIt(kInstance, level, filename, line, funcname, msg); +} + +// Test case for LogIt method with custom instance_name +TEST_F(DefaultLogTest, LogItTestWithCustomInstanceName) { + const char* kInstance = "custom_instance"; Log::Level level = Log::info; const char* filename = "test_file"; int line = 42; const char* funcname = "test_func"; std::string msg = "Test message"; - // Add testing for LogIt method here default_log_->LogIt(kInstance, level, filename, line, funcname, msg); } diff --git a/trpc/util/log/log.h b/trpc/util/log/log.h index 865a865a..f0e05c37 100644 --- a/trpc/util/log/log.h +++ b/trpc/util/log/log.h @@ -83,6 +83,11 @@ class Log : public RefCounted { /// @private For internal use purpose only. virtual bool ShouldLog(const char* instance_name, Level level) const = 0; + /// @brief Determine whether the log level of the tRPC-Cpp framework instance meets the requirements for printing this log. + /// @param level Log instance level + /// @return true/false + virtual bool ShouldLog(Level level) const = 0; + /// @brief Output log to a sink instance. /// @param instance_name Log instance name /// @param level Log instance level diff --git a/trpc/util/log/logging.h b/trpc/util/log/logging.h index c8d3ec7d..0204a337 100644 --- a/trpc/util/log/logging.h +++ b/trpc/util/log/logging.h @@ -153,7 +153,7 @@ constexpr char kTrpcLogCacheStringDefault[] = "default"; #define TRPC_LOGGER_PRT_ERROR(instance, format, args...) TRPC_PRT(instance, ::trpc::Log::error, format, ##args) #define TRPC_LOGGER_PRT_CRITICAL(instance, format, args...) TRPC_PRT(instance, ::trpc::Log::critical, format, ##args) -/// @brief printf-like style log macros with conditions. +/// @brief printf-like style log macros with conditions for tRPC-Cpp framework #define TRPC_LOGGER_PRT_TRACE_IF(instance, condition, format, args...) \ TRPC_PRT_IF(instance, condition, ::trpc::Log::trace, format, ##args) #define TRPC_LOGGER_PRT_DEBUG_IF(instance, condition, format, args...) \ @@ -167,6 +167,7 @@ constexpr char kTrpcLogCacheStringDefault[] = "default"; #define TRPC_LOGGER_PRT_CRITICAL_IF(instance, condition, format, args...) \ TRPC_PRT_IF(instance, condition, ::trpc::Log::critical, format, ##args) +/// @brief printf-like style log macros with conditions #define TRPC_LOGGER_PRT_TRACE_EX(context, instance, format, args...) \ TRPC_PRT_EX(context, instance, ::trpc::Log::trace, format, ##args) #define TRPC_LOGGER_PRT_DEBUG_EX(context, instance, format, args...) \ @@ -180,6 +181,7 @@ constexpr char kTrpcLogCacheStringDefault[] = "default"; #define TRPC_LOGGER_PRT_CRITICAL_EX(context, instance, format, args...) \ TRPC_PRT_EX(context, instance, ::trpc::Log::critical, format, ##args) +/// @brief printf-like style log macros with conditions and context #define TRPC_LOGGER_PRT_TRACE_IF_EX(context, instance, condition, format, args...) \ TRPC_PRT_IF_EX(context, instance, condition, ::trpc::Log::trace, format, ##args) #define TRPC_LOGGER_PRT_DEBUG_IF_EX(context, instance, condition, format, args...) \ @@ -194,29 +196,29 @@ constexpr char kTrpcLogCacheStringDefault[] = "default"; TRPC_PRT_IF_EX(context, instance, condition, ::trpc::Log::critical, format, ##args) /// @brief Log will be output to the "default" logger instance provided by the framework "default" plugin. -#define TRPC_PRT_TRACE(format, args...) TRPC_LOGGER_PRT_TRACE(::trpc::log::kTrpcLogCacheStringDefault, format, ##args) -#define TRPC_PRT_DEBUG(format, args...) TRPC_LOGGER_PRT_DEBUG(::trpc::log::kTrpcLogCacheStringDefault, format, ##args) -#define TRPC_PRT_INFO(format, args...) TRPC_LOGGER_PRT_INFO(::trpc::log::kTrpcLogCacheStringDefault, format, ##args) -#define TRPC_PRT_WARN(format, args...) TRPC_LOGGER_PRT_WARN(::trpc::log::kTrpcLogCacheStringDefault, format, ##args) -#define TRPC_PRT_ERROR(format, args...) TRPC_LOGGER_PRT_ERROR(::trpc::log::kTrpcLogCacheStringDefault, format, ##args) +#define TRPC_PRT_TRACE(format, args...) TRPC_PRT_DEFAULT(::trpc::log::kTrpcLogCacheStringDefault, ::trpc::Log::trace, format, ##args) +#define TRPC_PRT_DEBUG(format, args...) TRPC_PRT_DEFAULT(::trpc::log::kTrpcLogCacheStringDefault, ::trpc::Log::debug, format, ##args) +#define TRPC_PRT_INFO(format, args...) TRPC_PRT_DEFAULT(::trpc::log::kTrpcLogCacheStringDefault, ::trpc::Log::info, format, ##args) +#define TRPC_PRT_WARN(format, args...) TRPC_PRT_DEFAULT(::trpc::log::kTrpcLogCacheStringDefault, ::trpc::Log::warn, format, ##args) +#define TRPC_PRT_ERROR(format, args...) TRPC_PRT_DEFAULT(::trpc::log::kTrpcLogCacheStringDefault, ::trpc::Log::error, format, ##args) #define TRPC_PRT_CRITICAL(format, args...) \ - TRPC_LOGGER_PRT_CRITICAL(::trpc::log::kTrpcLogCacheStringDefault, format, ##args) + TRPC_PRT_DEFAULT(::trpc::log::kTrpcLogCacheStringDefault, ::trpc::Log::critical, format, ##args) /// @brief Log macro for the framework default log with conditions. #define TRPC_PRT_TRACE_IF(condition, format, args...) \ - TRPC_LOGGER_PRT_TRACE_IF(::trpc::log::kTrpcLogCacheStringDefault, condition, format, ##args) + TRPC_PRT_IF_DEFAULT(::trpc::log::kTrpcLogCacheStringDefault, condition, ::trpc::Log::trace, format, ##args) #define TRPC_PRT_DEBUG_IF(condition, format, args...) \ - TRPC_LOGGER_PRT_DEBUG_IF(::trpc::log::kTrpcLogCacheStringDefault, condition, format, ##args) + TRPC_PRT_IF_DEFAULT(::trpc::log::kTrpcLogCacheStringDefault, condition, ::trpc::Log::debug, format, ##args) #define TRPC_PRT_INFO_IF(condition, format, args...) \ - TRPC_LOGGER_PRT_INFO_IF(::trpc::log::kTrpcLogCacheStringDefault, condition, format, ##args) + TRPC_PRT_IF_DEFAULT(::trpc::log::kTrpcLogCacheStringDefault, condition, ::trpc::Log::info, format, ##args) #define TRPC_PRT_WARN_IF(condition, format, args...) \ - TRPC_LOGGER_PRT_WARN_IF(::trpc::log::kTrpcLogCacheStringDefault, condition, format, ##args) + TRPC_PRT_IF_DEFAULT(::trpc::log::kTrpcLogCacheStringDefault, condition, ::trpc::Log::warn, format, ##args) #define TRPC_PRT_ERROR_IF(condition, format, args...) \ - TRPC_LOGGER_PRT_ERROR_IF(::trpc::log::kTrpcLogCacheStringDefault, condition, format, ##args) + TRPC_PRT_IF_DEFAULT(::trpc::log::kTrpcLogCacheStringDefault, condition, ::trpc::Log::error, format, ##args) #define TRPC_PRT_CRITICAL_IF(condition, format, args...) \ - TRPC_LOGGER_PRT_CRITICAL_IF(::trpc::log::kTrpcLogCacheStringDefault, condition, format, ##args) + TRPC_PRT_IF_DEFAULT(::trpc::log::kTrpcLogCacheStringDefault, condition, ::trpc::Log::critical, format, ##args) -/// @brief stream-like log macros +/// @brief stream-like log macros for tRPC-Cpp framework #define TRPC_LOG_TRACE(msg) TRPC_LOG_MSG(::trpc::Log::trace, msg) #define TRPC_LOG_DEBUG(msg) TRPC_LOG_MSG(::trpc::Log::debug, msg) #define TRPC_LOG_INFO(msg) TRPC_LOG_MSG(::trpc::Log::info, msg) @@ -224,6 +226,14 @@ constexpr char kTrpcLogCacheStringDefault[] = "default"; #define TRPC_LOG_ERROR(msg) TRPC_LOG_MSG(::trpc::Log::error, msg) #define TRPC_LOG_CRITICAL(msg) TRPC_LOG_MSG(::trpc::Log::critical, msg) +/// @brief stream-like log macros +#define TRPC_LOGGER_TRACE(instance, msg) TRPC_LOGGER_MSG(::trpc::Log::trace, instance, msg) +#define TRPC_LOGGER_DEBUG(instance, msg) TRPC_LOGGER_MSG(::trpc::Log::debug, instance, msg) +#define TRPC_LOGGER_INFO(instance, msg) TRPC_LOGGER_MSG(::trpc::Log::info, instance, msg) +#define TRPC_LOGGER_WARN(instance, msg) TRPC_LOGGER_MSG(::trpc::Log::warn, instance, msg) +#define TRPC_LOGGER_ERROR(instance, msg) TRPC_LOGGER_MSG(::trpc::Log::error, instance, msg) +#define TRPC_LOGGER_CRITICAL(instance, msg) TRPC_LOGGER_MSG(::trpc::Log::critical, instance, msg) + /// @brief stream-like style log macros with conditions #define TRPC_LOG_TRACE_IF(condition, msg) TRPC_LOG_MSG_IF(::trpc::Log::trace, condition, msg) #define TRPC_LOG_DEBUG_IF(condition, msg) TRPC_LOG_MSG_IF(::trpc::Log::debug, condition, msg) @@ -232,6 +242,13 @@ constexpr char kTrpcLogCacheStringDefault[] = "default"; #define TRPC_LOG_ERROR_IF(condition, msg) TRPC_LOG_MSG_IF(::trpc::Log::error, condition, msg) #define TRPC_LOG_CRITICAL_IF(condition, msg) TRPC_LOG_MSG_IF(::trpc::Log::critical, condition, msg) +#define TRPC_LOGGER_TRACE_IF(instance, condition, msg) TRPC_LOG_MSG_IF(::trpc::Log::trace, instance, condition, msg) +#define TRPC_LOGGER_DEBUG_IF(instance, condition, msg) TRPC_LOG_MSG_IF(::trpc::Log::debug, instance, condition, msg) +#define TRPC_LOGGER_INFO_IF(instance, condition, msg) TRPC_LOG_MSG_IF(::trpc::Log::info, instance, condition, msg) +#define TRPC_LOGGER_WARN_IF(instance, condition, msg) TRPC_LOG_MSG_IF(::trpc::Log::warn, instance, condition, msg) +#define TRPC_LOGGER_ERROR_IF(instance, condition, msg) TRPC_LOG_MSG_IF(::trpc::Log::error, instance, condition, msg) +#define TRPC_LOGGER_CRITICAL_IF(instance, condition, msg) TRPC_LOG_MSG_IF(::trpc::Log::critical, instance, condition, msg) + /// @brief logger instances can be specified to customize the log output. /// @note Use case: Separate business logs from framework logs, /// Different business logs specify different loggers. diff --git a/trpc/util/log/printf_like.h b/trpc/util/log/printf_like.h index e0d7bafc..8e16e38a 100644 --- a/trpc/util/log/printf_like.h +++ b/trpc/util/log/printf_like.h @@ -17,10 +17,34 @@ #include "fmt/printf.h" -//#include "trpc/client/client_context.h" -//#include "trpc/server/server_context.h" #include "trpc/util/log/log.h" +/// @brief printf-like log macros for tRPC-Cpp framework log +#define TRPC_PRT_DEFAULT(instance, level, formats, args...) \ + do { \ + const auto& __TRPC_PRINTF_LIKE_INSTANCE__ = ::trpc::LogFactory::GetInstance()->Get(); \ + if (__TRPC_PRINTF_LIKE_INSTANCE__) { \ + if (__TRPC_PRINTF_LIKE_INSTANCE__->ShouldLog(level)) { \ + TRPC_LOG_TRY { \ + std::string __TRPC_PRINTF_LIKE_MSG__ = ::trpc::Log::LogSprintf(formats, ##args); \ + __TRPC_PRINTF_LIKE_INSTANCE__->LogIt(instance, level, __FILE__, __LINE__, __FUNCTION__, \ + __TRPC_PRINTF_LIKE_MSG__); \ + } \ + TRPC_LOG_CATCH(instance) \ + } \ + } else { \ + if (::trpc::Log::ShouldNoLog(instance, level)) { \ + TRPC_LOG_TRY { \ + std::string __TRPC_PRINTF_LIKE_MSG__ = ::trpc::Log::LogSprintf(formats, ##args); \ + ::trpc::Log::NoLog(instance, level, __FILE__, __LINE__, __FUNCTION__, \ + std::string_view(__TRPC_PRINTF_LIKE_MSG__.data(), __TRPC_PRINTF_LIKE_MSG__.size())); \ + } \ + TRPC_LOG_CATCH(instance) \ + } \ + } \ + } while (0) + + /// @brief printf-like log macros #define TRPC_PRT(instance, level, formats, args...) \ do { \ @@ -46,9 +70,14 @@ } \ } while (0) -#define TRPC_PRT_IF(instance, condition, level, formats, args...) \ - if (condition) { \ - TRPC_PRT(instance, level, formats, ##args); \ +#define TRPC_PRT_IF(instance, condition, level, formats, args...) \ + if (condition) { \ + TRPC_PRT_DEFAULT(instance, level, formats, ##args); \ + } + +#define TRPC_PRT_IF_DEFAULT(instance, condition, level, formats, args...) \ + if (condition) { \ + TRPC_PRT(instance, level, formats, ##args); \ } #define TRPC_PRT_EX(context, instance, level, formats, args...) \ diff --git a/trpc/util/log/python_like.h b/trpc/util/log/python_like.h index 43f7185a..698556ac 100644 --- a/trpc/util/log/python_like.h +++ b/trpc/util/log/python_like.h @@ -21,6 +21,30 @@ #include "trpc/util/log/log.h" +/// @brief python-like style log macros for tRPC-Cpp framework log +#define TRPC_FMT_DEFAULT(instance, level, formats, args...) \ + do { \ + const auto& __TRPC_PYTHON_LIKE_INSTANCE__ = ::trpc::LogFactory::GetInstance()->Get(); \ + if (__TRPC_PYTHON_LIKE_INSTANCE__) { \ + if (__TRPC_PYTHON_LIKE_INSTANCE__->ShouldLog(level)) { \ + TRPC_LOG_TRY { \ + __TRPC_PYTHON_LIKE_INSTANCE__->LogIt(instance, level, __FILE__, __LINE__, __FUNCTION__, \ + ::trpc::Log::LogFormat(formats, ##args)); \ + } \ + TRPC_LOG_CATCH(instance) \ + } \ + } else { \ + if (::trpc::Log::ShouldNoLog(instance, level)) { \ + TRPC_LOG_TRY { \ + ::trpc::Log::NoLog(instance, level, __FILE__, __LINE__, __FUNCTION__, \ + ::trpc::Log::LogFormat(formats, ##args)); \ + } \ + TRPC_LOG_CATCH(instance) \ + } \ + } \ + } while (0) + + /// @brief python-like style log macros #define TRPC_FMT(instance, level, formats, args...) \ do { \ diff --git a/trpc/util/log/stream_like.h b/trpc/util/log/stream_like.h index e6ace3b3..acad9810 100644 --- a/trpc/util/log/stream_like.h +++ b/trpc/util/log/stream_like.h @@ -47,6 +47,56 @@ } \ } while (0) + +/// @brief stream-like log macros for tRPC-Cpp framework log +#define TRPC_STREAM_DEFAULT(instance, level, msg) \ + do { \ + const auto& __TRPC_CPP_STREAM_LOGGER_INSTANCE__ = ::trpc::LogFactory::GetInstance()->Get(); \ + if (__TRPC_CPP_STREAM_LOGGER_INSTANCE__) { \ + if (__TRPC_CPP_STREAM_LOGGER_INSTANCE__->ShouldLog(level)) { \ + TRPC_LOG_TRY { \ + STREAM_APPENDER(msg); \ + __TRPC_CPP_STREAM_LOGGER_INSTANCE__->LogIt(instance, level, __FILE__, __LINE__, __FUNCTION__, \ + __TRPC_STREAM__.str()); \ + } \ + TRPC_LOG_CATCH(instance) \ + } \ + } else { \ + if (::trpc::Log::ShouldNoLog(instance, level)) { \ + TRPC_LOG_TRY { \ + STREAM_APPENDER(msg); \ + ::trpc::Log::NoLog(instance, level, __FILE__, __LINE__, __FUNCTION__, __TRPC_STREAM__.str()); \ + } \ + TRPC_LOG_CATCH(instance) \ + } \ + } \ + } while (0) + +/// @brief stream-like log macros for tRPC-Cpp framework +#define TRPC_STREAM_EX_DEFAULT(instance, level, context, msg) \ + do { \ + const auto& __TRPC_CPP_STREAM_LOGGER_INSTANCE__ = ::trpc::LogFactory::GetInstance()->Get(); \ + if (__TRPC_CPP_STREAM_LOGGER_INSTANCE__) { \ + if (__TRPC_CPP_STREAM_LOGGER_INSTANCE__->ShouldLog(level)) { \ + TRPC_LOG_TRY { \ + STREAM_APPENDER(msg); \ + __TRPC_CPP_STREAM_LOGGER_INSTANCE__->LogIt(instance, level, __FILE__, __LINE__, __FUNCTION__, \ + __TRPC_STREAM__.str(), (context)->GetAllFilterData()); \ + } \ + TRPC_LOG_CATCH(instance) \ + } \ + } else { \ + if (::trpc::Log::ShouldNoLog(instance, level)) { \ + TRPC_LOG_TRY { \ + STREAM_APPENDER(msg); \ + ::trpc::Log::NoLog(instance, level, __FILE__, __LINE__, __FUNCTION__, __TRPC_STREAM__.str()); \ + } \ + TRPC_LOG_CATCH(instance) \ + } \ + } \ + } while (0) + + /// @brief stream-like log macros #define TRPC_STREAM_EX(instance, level, context, msg) \ do { \ @@ -71,25 +121,31 @@ } \ } while (0) -#define TRPC_LOG_MSG(level, msg) TRPC_STREAM(::trpc::log::kTrpcLogCacheStringDefault, level, msg) +#define TRPC_LOG_MSG(level, msg) TRPC_STREAM_DEFAULT(::trpc::log::kTrpcLogCacheStringDefault, level, msg) + +#define TRPC_LOGGER_MSG(level, instance, msg) TRPC_STREAM(instance, level, msg) + +#define TRPC_LOG_MSG_IF(level, condition, msg) \ + if (condition) { \ + TRPC_STREAM_DEFAULT(::trpc::log::kTrpcLogCacheStringDefault, level, msg); \ + } -#define TRPC_LOG_MSG_IF(level, condition, msg) \ - if (condition) { \ - TRPC_LOG_MSG(level, msg); \ +#define TRPC_LOGGER_MSG_IF(level, condition, instance, msg) \ + if (condition) { \ + TRPC_STREAM(instance, level, msg); \ } /// @brief uses default logger for logging with context -#define TRPC_LOG_MSG_EX(level, context, msg) \ - TRPC_STREAM_EX(::trpc::log::kTrpcLogCacheStringDefault, level, context, msg) +#define TRPC_LOG_MSG_IF_EX(level, context, condition, msg) \ + if (condition) { \ + TRPC_LOG_MSG_EX(level, context, msg); \ + } -#define TRPC_LOG_MSG_IF_EX(level, context, condition, msg) \ - if (condition) { \ - TRPC_LOG_MSG_EX(level, context, msg); \ +#define TRPC_LOGGER_MSG_IF_EX(level, context, instance, condition, msg) \ + if (condition) { \ + TRPC_LOGGER_MSG_EX(level, context, instance, msg); \ } #define TRPC_LOGGER_MSG_EX(level, context, instance, msg) TRPC_STREAM_EX(instance, level, context, msg) -#define TRPC_LOGGER_MSG_IF_EX(level, context, instance, condition, msg) \ - if (condition) { \ - TRPC_LOGGER_MSG_EX(level, context, instance, msg); \ - } +#define TRPC_LOG_MSG_EX(level, context, msg) TRPC_STREAM_EX_DEFAULT(::trpc::log::kTrpcLogCacheStringDefault, level, context, msg)