VLink  2.0.0
A high-performance communication middleware
logger.h 文件参考

Singleton logger with stream / format / printf / RAII-stream entry points. 更多...

#include <cstdio>
#include <iomanip>
#include <iostream>
#include <memory>
#include <string>
#include <string_view>
#include <type_traits>
#include <utility>
#include "./exception.h"
#include "./fast_stream.h"
#include "./format.h"
#include "./functional.h"
#include "./macros.h"
logger.h 的引用(Include)关系图:
此图展示该文件直接或间接的被哪些文件引用了:

浏览源代码.

class  vlink::Logger
 Global singleton logger with four formatting styles and independently configurable sinks. 更多...
 
struct  vlink::Logger::NoDetail
 Sentinel type indicating no detail prefix is attached. 更多...
 
class  vlink::Logger::WrapperStream< LevelT >
 RAII helper backing SLOG_*; collects tokens and flushes on destruction. 更多...
 

命名空间

 

宏定义

#define VLINK_LOG_GET_DETAIL(level)
 Macro Definitions 更多...
 
#define VLINK_LOG_HEX(offset)   std::hex, std::uppercase, std::setw(offset), std::setfill('0')
 
#define VLINK_LOG_HEXSS(offset)   std::hex << std::uppercase << std::setw(offset) << std::setfill('0')
 
#define VLINK_LOG_IF_T   VLinkLogger::is_writable(VLinkLogger::kTrace)
 
#define VLINK_LOG_IF_D   VLinkLogger::is_writable(VLinkLogger::kDebug)
 
#define VLINK_LOG_IF_I   VLinkLogger::is_writable(VLinkLogger::kInfo)
 
#define VLINK_LOG_IF_W   VLinkLogger::is_writable(VLinkLogger::kWarn)
 
#define VLINK_LOG_IF_E   VLinkLogger::is_writable(VLinkLogger::kError)
 
#define VLINK_LOG_IF_F   VLinkLogger::is_writable(VLinkLogger::kFatal)
 
#define VLINK_LOG_T(...)    VLinkLogger::print_stream_style<VLinkLogger::kTrace>(VLINK_LOG_GET_DETAIL(VLinkLogger::kTrace), __VA_ARGS__)
 
#define VLINK_LOG_D(...)    VLinkLogger::print_stream_style<VLinkLogger::kDebug>(VLINK_LOG_GET_DETAIL(VLinkLogger::kDebug), __VA_ARGS__)
 
#define VLINK_LOG_I(...)    VLinkLogger::print_stream_style<VLinkLogger::kInfo>(VLINK_LOG_GET_DETAIL(VLinkLogger::kInfo), __VA_ARGS__)
 
#define VLINK_LOG_W(...)    VLinkLogger::print_stream_style<VLinkLogger::kWarn>(VLINK_LOG_GET_DETAIL(VLinkLogger::kWarn), __VA_ARGS__)
 
#define VLINK_LOG_E(...)    VLinkLogger::print_stream_style<VLinkLogger::kError>(VLINK_LOG_GET_DETAIL(VLinkLogger::kError), __VA_ARGS__)
 
#define VLINK_LOG_F(...)    VLinkLogger::print_stream_style<VLinkLogger::kFatal>(VLINK_LOG_GET_DETAIL(VLinkLogger::kFatal), __VA_ARGS__)
 
#define VLINK_MLOG_T(...)    VLinkLogger::print_format_style<VLinkLogger::kTrace>(VLINK_LOG_GET_DETAIL(VLinkLogger::kTrace), __VA_ARGS__)
 
#define VLINK_MLOG_D(...)    VLinkLogger::print_format_style<VLinkLogger::kDebug>(VLINK_LOG_GET_DETAIL(VLinkLogger::kDebug), __VA_ARGS__)
 
#define VLINK_MLOG_I(...)    VLinkLogger::print_format_style<VLinkLogger::kInfo>(VLINK_LOG_GET_DETAIL(VLinkLogger::kInfo), __VA_ARGS__)
 
#define VLINK_MLOG_W(...)    VLinkLogger::print_format_style<VLinkLogger::kWarn>(VLINK_LOG_GET_DETAIL(VLinkLogger::kWarn), __VA_ARGS__)
 
#define VLINK_MLOG_E(...)    VLinkLogger::print_format_style<VLinkLogger::kError>(VLINK_LOG_GET_DETAIL(VLinkLogger::kError), __VA_ARGS__)
 
#define VLINK_MLOG_F(...)    VLinkLogger::print_format_style<VLinkLogger::kFatal>(VLINK_LOG_GET_DETAIL(VLinkLogger::kFatal), __VA_ARGS__)
 
#define VLINK_CLOG_T(...)    VLinkLogger::print_c_style<VLinkLogger::kTrace>(VLINK_LOG_GET_DETAIL(VLinkLogger::kTrace), __VA_ARGS__)
 
#define VLINK_CLOG_D(...)    VLinkLogger::print_c_style<VLinkLogger::kDebug>(VLINK_LOG_GET_DETAIL(VLinkLogger::kDebug), __VA_ARGS__)
 
#define VLINK_CLOG_I(...)    VLinkLogger::print_c_style<VLinkLogger::kInfo>(VLINK_LOG_GET_DETAIL(VLinkLogger::kInfo), __VA_ARGS__)
 
#define VLINK_CLOG_W(...)    VLinkLogger::print_c_style<VLinkLogger::kWarn>(VLINK_LOG_GET_DETAIL(VLinkLogger::kWarn), __VA_ARGS__)
 
#define VLINK_CLOG_E(...)    VLinkLogger::print_c_style<VLinkLogger::kError>(VLINK_LOG_GET_DETAIL(VLinkLogger::kError), __VA_ARGS__)
 
#define VLINK_CLOG_F(...)    VLinkLogger::print_c_style<VLinkLogger::kFatal>(VLINK_LOG_GET_DETAIL(VLinkLogger::kFatal), __VA_ARGS__)
 
#define VLINK_SLOG_T   VLinkLogger::WrapperStream<VLinkLogger::kTrace>(VLINK_LOG_GET_DETAIL(VLinkLogger::kTrace))
 
#define VLINK_SLOG_D   VLinkLogger::WrapperStream<VLinkLogger::kDebug>(VLINK_LOG_GET_DETAIL(VLinkLogger::kDebug))
 
#define VLINK_SLOG_I   VLinkLogger::WrapperStream<VLinkLogger::kInfo>(VLINK_LOG_GET_DETAIL(VLinkLogger::kInfo))
 
#define VLINK_SLOG_W   VLinkLogger::WrapperStream<VLinkLogger::kWarn>(VLINK_LOG_GET_DETAIL(VLinkLogger::kWarn))
 
#define VLINK_SLOG_E   VLinkLogger::WrapperStream<VLinkLogger::kError>(VLINK_LOG_GET_DETAIL(VLinkLogger::kError))
 
#define VLINK_SLOG_F   VLinkLogger::WrapperStream<VLinkLogger::kFatal>(VLINK_LOG_GET_DETAIL(VLinkLogger::kFatal))
 
#define VLOG_T(...)   VLINK_LOG_T(__VA_ARGS__)
 
#define VLOG_D(...)   VLINK_LOG_D(__VA_ARGS__)
 
#define VLOG_I(...)   VLINK_LOG_I(__VA_ARGS__)
 
#define VLOG_W(...)   VLINK_LOG_W(__VA_ARGS__)
 
#define VLOG_E(...)   VLINK_LOG_E(__VA_ARGS__)
 
#define VLOG_F(...)   VLINK_LOG_F(__VA_ARGS__)
 
#define CLOG_T(...)   VLINK_CLOG_T(__VA_ARGS__)
 
#define CLOG_D(...)   VLINK_CLOG_D(__VA_ARGS__)
 
#define CLOG_I(...)   VLINK_CLOG_I(__VA_ARGS__)
 
#define CLOG_W(...)   VLINK_CLOG_W(__VA_ARGS__)
 
#define CLOG_E(...)   VLINK_CLOG_E(__VA_ARGS__)
 
#define CLOG_F(...)   VLINK_CLOG_F(__VA_ARGS__)
 
#define MLOG_T(...)   VLINK_MLOG_T(__VA_ARGS__)
 
#define MLOG_D(...)   VLINK_MLOG_D(__VA_ARGS__)
 
#define MLOG_I(...)   VLINK_MLOG_I(__VA_ARGS__)
 
#define MLOG_W(...)   VLINK_MLOG_W(__VA_ARGS__)
 
#define MLOG_E(...)   VLINK_MLOG_E(__VA_ARGS__)
 
#define MLOG_F(...)   VLINK_MLOG_F(__VA_ARGS__)
 
#define SLOG_T   VLINK_SLOG_T
 
#define SLOG_D   VLINK_SLOG_D
 
#define SLOG_I   VLINK_SLOG_I
 
#define SLOG_W   VLINK_SLOG_W
 
#define SLOG_E   VLINK_SLOG_E
 
#define SLOG_F   VLINK_SLOG_F
 

类型定义

using VLinkLogger = vlink::Logger
 

详细描述

Singleton logger with stream / format / printf / RAII-stream entry points.

vlink::Logger is the central logging facility. A single instance is constructed via Logger::init and reused for the rest of the process; each call routes through a console sink and an optional file sink whose minimum levels are independently configurable.

Entry point cheat sheet
Style Macro family Backing API Argument shape
Stream VLOG_x FastStream operator<< VLOG_I("x=", x, " y=", y)
Placeholder MLOG_x vlink::format::format_to_n MLOG_W("x={} y={}", x, y)
printf CLOG_x std::snprintf CLOG_E("errno=%d", err)
RAII stream SLOG_x WrapperStream SLOG_D << "a=" << a
Severity ladder
Value Name Use case
0 kTrace Verbose internals
1 kDebug Developer diagnostics
2 kInfo Normal operational messages
3 kWarn Unusual but recoverable conditions
4 kError Errors that may affect operation
5 kFatal Unrecoverable; throws RuntimeError
6 kOff Disables the corresponding sink
ASCII priority diagram
*    higher severity  ->  kFatal  (throws)
*                         kError
*                         kWarn   <- kDetailLevel (default): adds {file:line}
*                         kInfo
*                         kDebug
*                         kTrace
*    lower severity   ->  kOff    (sink disabled)
* 
Compile-time gating
  • VLINK_LOG_LEVEL =N strips levels below N at compile time (zero overhead).
  • VLINK_LOG_DETAIL_LEVEL =N changes the level at which file/line is appended.
  • VLINK_LOG_DISABLE_SHORT removes the VLOG_* / MLOG_* / CLOG_* / SLOG_* aliases.
Formatting cheat sheet
Need Snippet
Hex with 4 digits VLOG_I(VLINK_LOG_HEX(4), value)
Inline hex inside SLOG_* SLOG_I << VLINK_LOG_HEXSS(4) << value
Gate around expensive log args if (VLINK_LOG_IF_D) { ... }
Example
vlink::Logger::init("my_app", "/var/log/my_app.log");
VLOG_I("node started, id=", node_id);
MLOG_W("temperature is {} C", temp);
CLOG_E("errno=%d", errno);
SLOG_D << "values: " << a << " " << b;
#define CLOG_E(...)
Definition: logger.h:801
#define SLOG_D
Definition: logger.h:819
#define VLOG_I(...)
Definition: logger.h:785
#define MLOG_W(...)
Definition: logger.h:811
注解
kFatal messages call Logger::flush and then throw Exception::RuntimeError so the application can perform a controlled shutdown. Backends include spdlog, quill, DLT, Android logcat, QNX slog2 and kmsg depending on build options.

宏定义说明

◆ CLOG_D

#define CLOG_D (   ...)    VLINK_CLOG_D(__VA_ARGS__)

◆ CLOG_E

#define CLOG_E (   ...)    VLINK_CLOG_E(__VA_ARGS__)

◆ CLOG_F

#define CLOG_F (   ...)    VLINK_CLOG_F(__VA_ARGS__)

◆ CLOG_I

#define CLOG_I (   ...)    VLINK_CLOG_I(__VA_ARGS__)

◆ CLOG_T

#define CLOG_T (   ...)    VLINK_CLOG_T(__VA_ARGS__)

◆ CLOG_W

#define CLOG_W (   ...)    VLINK_CLOG_W(__VA_ARGS__)

◆ MLOG_D

#define MLOG_D (   ...)    VLINK_MLOG_D(__VA_ARGS__)

◆ MLOG_E

#define MLOG_E (   ...)    VLINK_MLOG_E(__VA_ARGS__)

◆ MLOG_F

#define MLOG_F (   ...)    VLINK_MLOG_F(__VA_ARGS__)

◆ MLOG_I

#define MLOG_I (   ...)    VLINK_MLOG_I(__VA_ARGS__)

◆ MLOG_T

#define MLOG_T (   ...)    VLINK_MLOG_T(__VA_ARGS__)

◆ MLOG_W

#define MLOG_W (   ...)    VLINK_MLOG_W(__VA_ARGS__)

◆ SLOG_D

#define SLOG_D   VLINK_SLOG_D

◆ SLOG_E

#define SLOG_E   VLINK_SLOG_E

◆ SLOG_F

#define SLOG_F   VLINK_SLOG_F

◆ SLOG_I

#define SLOG_I   VLINK_SLOG_I

◆ SLOG_T

#define SLOG_T   VLINK_SLOG_T

◆ SLOG_W

#define SLOG_W   VLINK_SLOG_W

◆ VLINK_CLOG_D

#define VLINK_CLOG_D (   ...)     VLinkLogger::print_c_style<VLinkLogger::kDebug>(VLINK_LOG_GET_DETAIL(VLinkLogger::kDebug), __VA_ARGS__)

◆ VLINK_CLOG_E

#define VLINK_CLOG_E (   ...)     VLinkLogger::print_c_style<VLinkLogger::kError>(VLINK_LOG_GET_DETAIL(VLinkLogger::kError), __VA_ARGS__)

◆ VLINK_CLOG_F

#define VLINK_CLOG_F (   ...)     VLinkLogger::print_c_style<VLinkLogger::kFatal>(VLINK_LOG_GET_DETAIL(VLinkLogger::kFatal), __VA_ARGS__)

◆ VLINK_CLOG_I

#define VLINK_CLOG_I (   ...)     VLinkLogger::print_c_style<VLinkLogger::kInfo>(VLINK_LOG_GET_DETAIL(VLinkLogger::kInfo), __VA_ARGS__)

◆ VLINK_CLOG_T

#define VLINK_CLOG_T (   ...)     VLinkLogger::print_c_style<VLinkLogger::kTrace>(VLINK_LOG_GET_DETAIL(VLinkLogger::kTrace), __VA_ARGS__)

◆ VLINK_CLOG_W

#define VLINK_CLOG_W (   ...)     VLinkLogger::print_c_style<VLinkLogger::kWarn>(VLINK_LOG_GET_DETAIL(VLinkLogger::kWarn), __VA_ARGS__)

◆ VLINK_LOG_D

◆ VLINK_LOG_E

◆ VLINK_LOG_F

◆ VLINK_LOG_GET_DETAIL

#define VLINK_LOG_GET_DETAIL (   level)
值:
([]() -> auto { \
if constexpr ((level) >= VLinkLogger::kDetailLevel) { \
} else { \
} \
})()

Macro Definitions

◆ VLINK_LOG_HEX

#define VLINK_LOG_HEX (   offset)    std::hex, std::uppercase, std::setw(offset), std::setfill('0')

◆ VLINK_LOG_HEXSS

#define VLINK_LOG_HEXSS (   offset)    std::hex << std::uppercase << std::setw(offset) << std::setfill('0')

◆ VLINK_LOG_I

#define VLINK_LOG_I (   ...)     VLinkLogger::print_stream_style<VLinkLogger::kInfo>(VLINK_LOG_GET_DETAIL(VLinkLogger::kInfo), __VA_ARGS__)

◆ VLINK_LOG_IF_D

#define VLINK_LOG_IF_D   VLinkLogger::is_writable(VLinkLogger::kDebug)

◆ VLINK_LOG_IF_E

#define VLINK_LOG_IF_E   VLinkLogger::is_writable(VLinkLogger::kError)

◆ VLINK_LOG_IF_F

#define VLINK_LOG_IF_F   VLinkLogger::is_writable(VLinkLogger::kFatal)

◆ VLINK_LOG_IF_I

#define VLINK_LOG_IF_I   VLinkLogger::is_writable(VLinkLogger::kInfo)

◆ VLINK_LOG_IF_T

#define VLINK_LOG_IF_T   VLinkLogger::is_writable(VLinkLogger::kTrace)

◆ VLINK_LOG_IF_W

#define VLINK_LOG_IF_W   VLinkLogger::is_writable(VLinkLogger::kWarn)

◆ VLINK_LOG_T

◆ VLINK_LOG_W

#define VLINK_LOG_W (   ...)     VLinkLogger::print_stream_style<VLinkLogger::kWarn>(VLINK_LOG_GET_DETAIL(VLinkLogger::kWarn), __VA_ARGS__)

◆ VLINK_MLOG_D

◆ VLINK_MLOG_E

◆ VLINK_MLOG_F

◆ VLINK_MLOG_I

#define VLINK_MLOG_I (   ...)     VLinkLogger::print_format_style<VLinkLogger::kInfo>(VLINK_LOG_GET_DETAIL(VLinkLogger::kInfo), __VA_ARGS__)

◆ VLINK_MLOG_T

◆ VLINK_MLOG_W

#define VLINK_MLOG_W (   ...)     VLinkLogger::print_format_style<VLinkLogger::kWarn>(VLINK_LOG_GET_DETAIL(VLinkLogger::kWarn), __VA_ARGS__)

◆ VLINK_SLOG_D

◆ VLINK_SLOG_E

◆ VLINK_SLOG_F

◆ VLINK_SLOG_I

◆ VLINK_SLOG_T

◆ VLINK_SLOG_W

◆ VLOG_D

#define VLOG_D (   ...)    VLINK_LOG_D(__VA_ARGS__)

◆ VLOG_E

#define VLOG_E (   ...)    VLINK_LOG_E(__VA_ARGS__)

◆ VLOG_F

#define VLOG_F (   ...)    VLINK_LOG_F(__VA_ARGS__)

◆ VLOG_I

#define VLOG_I (   ...)    VLINK_LOG_I(__VA_ARGS__)

◆ VLOG_T

#define VLOG_T (   ...)    VLINK_LOG_T(__VA_ARGS__)

◆ VLOG_W

#define VLOG_W (   ...)    VLINK_LOG_W(__VA_ARGS__)

类型定义说明

◆ VLinkLogger