20#include <unordered_map>
44 using ptr = std::shared_ptr<Logger>;
53 Logger(
const std::string &loggername,
56 std::vector<LogSink::ptr> sinks)
60 _sinks(sinks.begin(), sinks.end()) {}
77 void debug(
const std::string &file,
size_t line,
const std::string &fmt, ...)
86 int ret = vasprintf(&res, fmt.c_str(), ap);
89 std::cout <<
"vasprintf fail\n";
103 void info(
const std::string &file,
size_t line,
const std::string &fmt, ...)
112 int ret = vasprintf(&res, fmt.c_str(), ap);
115 std::cout <<
"vasprintf fail\n";
129 void warn(
const std::string &file,
size_t line,
const std::string &fmt, ...)
138 int ret = vasprintf(&res, fmt.c_str(), ap);
141 std::cout <<
"vasprintf fail\n";
156 void error(
const std::string &file,
size_t line,
const std::string &fmt, ...)
165 int ret = vasprintf(&res, fmt.c_str(), ap);
168 std::cout <<
"vasprintf fail\n";
182 void fatal(
const std::string &file,
size_t line,
const std::string &fmt, ...)
191 int ret = vasprintf(&res, fmt.c_str(), ap);
194 std::cout <<
"vasprintf fail\n";
240 virtual void log(
const char *data,
size_t len) = 0;
254 std::stringstream ss;
257 log(ss.str().c_str(), ss.str().size());
285 :
Logger(loggername, level, formatter, sinks)
297 void log(
const char *data,
size_t len)
override
299 std::unique_lock<std::mutex> lock(
_mutex);
305 sink->log(data, len);
330 std::vector<LogSink::ptr> sinks,
332 :
Logger(loggername, level, formatter, sinks),
343 void log(
const char *data,
size_t len)
374 using ptr = std::shared_ptr<LoggerBuilder>;
444 void buildFormatter(
const std::string &pattern =
"[%d{%y-%m-%d|%H:%M:%S}][%t][%c][%f:%l][%p]%T%m%n")
446 _formatter = std::make_shared<Formatter>(pattern);
455 template <
typename SinkType,
typename... Args>
503 buildSink<StdoutSink>();
548 std::unique_lock<std::mutex> lock(
_mutex);
549 _loggers.insert(std::make_pair(logger->name(), logger));
559 std::unique_lock<std::mutex> lock(
_mutex);
573 std::unique_lock<std::mutex> lock(
_mutex);
577 std::cout <<
"未找到日志器!日志器名称:" << name << std::endl;
601 builder->buildLoggerName(
"root");
602 builder->buildFormatter();
616 std::unordered_map<std::string, Logger::ptr>
_loggers;
640 buildSink<StdoutSink>();
#define DEBUG(fmt,...)
使用默认日志器打印调试信息
Definition Xulog.h:95
异步日志器
Definition logger.hpp:316
AsyncLogger(const std::string &loggername, LogLevel::value level, Formatter::ptr &formatter, std::vector< LogSink::ptr > sinks, AsyncType looper_type)
构造函数
Definition logger.hpp:327
AsyncLooper::ptr _looper
异步事件循环器
Definition logger.hpp:363
void realLog(Buffer &buf)
实际落地函数,将缓冲区中的日志写入接收器
Definition logger.hpp:352
void log(const char *data, size_t len)
将数据写入缓冲区
Definition logger.hpp:343
异步工作器类
Definition looper.hpp:45
std::shared_ptr< AsyncLooper > ptr
Definition looper.hpp:47
异步日志缓冲区类
Definition buffer.hpp:24
size_t readAbleSize()
获取可读数据的长度
Definition buffer.hpp:66
const char * begin()
获取可读数据的起始地址
Definition buffer.hpp:57
全局日志器建造者
Definition logger.hpp:626
Logger::ptr build() override
构建日志器
Definition logger.hpp:635
局部日志器建造者
Definition logger.hpp:491
Logger::ptr build() override
建造日志器
Definition logger.hpp:498
日志等级类
Definition level.hpp:18
value
日志等级的枚举值
Definition level.hpp:27
std::shared_ptr< LogSink > ptr
智能指针类型
Definition sink.hpp:29
日志器建造者
Definition logger.hpp:373
void buildEnableUnsafeAsync()
Definition logger.hpp:395
std::vector< LogSink::ptr > _sinks
日志输出接收器
Definition logger.hpp:481
std::string _logger_name
日志器名称
Definition logger.hpp:478
AsyncType _looper_type
异步类型
Definition logger.hpp:476
LoggerBuilder()
构建接收器
Definition logger.hpp:384
void buildLoggerLevel(LogLevel::value level)
设置日志器级别
Definition logger.hpp:425
void buildLoggerType(LoggerType type=LoggerType::LOGGER_SYNC)
设置日志器类型
Definition logger.hpp:405
void buildSink(Args &&...args)
构建接收器
Definition logger.hpp:456
LoggerType _logger_type
日志器类型
Definition logger.hpp:477
Formatter::ptr getFormatter()
获取格式化器
Definition logger.hpp:470
std::shared_ptr< LoggerBuilder > ptr
Definition logger.hpp:374
LogLevel::value _limit_level
日志级别
Definition logger.hpp:479
Formatter::ptr _formatter
日志格式化器
Definition logger.hpp:480
void buildLoggerName(const std::string &name)
设置日志器名称
Definition logger.hpp:415
void buildFormatter(const std::string &pattern="[%d{%y-%m-%d|%H:%M:%S}][%t][%c][%f:%l][%p]%T%m%n")
设置日志格式
Definition logger.hpp:444
virtual Logger::ptr build()=0
建造日志器
抽象日志器基类
Definition logger.hpp:42
Logger(const std::string &loggername, LogLevel::value level, Formatter::ptr &formatter, std::vector< LogSink::ptr > sinks)
构造函数
Definition logger.hpp:53
std::string _logger_name
日志器名称
Definition logger.hpp:261
LogLevel::value getLimitLevel()
获取限制等级
Definition logger.hpp:216
std::string getName()
获取日志器名称
Definition logger.hpp:210
void fatal(const std::string &file, size_t line, const std::string &fmt,...)
记录致命级别日志
Definition logger.hpp:182
Formatter::ptr _formatter
日志格式化器
Definition logger.hpp:263
std::mutex _mutex
互斥锁
Definition logger.hpp:260
Formatter::ptr getFormatter()
获取格式化器
Definition logger.hpp:222
void info(const std::string &file, size_t line, const std::string &fmt,...)
记录信息级别日志
Definition logger.hpp:103
std::vector< LogSink::ptr > _sinks
日志输出接收器
Definition logger.hpp:264
LogMsg getMsg()
获取日志消息的结构化数据
Definition logger.hpp:203
void debug(const std::string &file, size_t line, const std::string &fmt,...)
记录调试级别日志
Definition logger.hpp:77
void warn(const std::string &file, size_t line, const std::string &fmt,...)
记录警告级别日志
Definition logger.hpp:129
std::atomic< LogLevel::value > _limit_level
日志级别
Definition logger.hpp:262
LogMsg _msg
存储临时的消息对象
Definition logger.hpp:259
void error(const std::string &file, size_t line, const std::string &fmt,...)
记录错误级别日志
Definition logger.hpp:156
std::shared_ptr< Logger > ptr
Definition logger.hpp:44
LoggerType _logger_type
Definition logger.hpp:265
virtual void log(const char *data, size_t len)=0
抽象日志输出接口
const std::string & name()
获取日志器名称
Definition logger.hpp:66
void serialize(LogLevel::value level, const std::string &file, size_t line, char *str)
序列化日志消息
Definition logger.hpp:249
LoggerType getLoggerType()
获取日志器类型
Definition logger.hpp:228
日志器管理器
Definition logger.hpp:519
Logger::ptr rootLogger()
获取根日志器
Definition logger.hpp:587
static LoggerManager & getInstance()
获取日志器管理器的实例
Definition logger.hpp:528
std::unordered_map< std::string, Logger::ptr > _loggers
日志器映射
Definition logger.hpp:616
bool hasLogger(const std::string &name)
检查是否存在指定名称的日志器
Definition logger.hpp:557
void addLogger(Logger::ptr &logger)
添加日志器到管理器
Definition logger.hpp:542
Logger::ptr getLogger(const std::string &name)
获取指定名称的日志器
Definition logger.hpp:571
Logger::ptr _root_logger
默认日志器
Definition logger.hpp:615
std::mutex _mutex
互斥锁
Definition logger.hpp:614
LoggerManager()
构造函数
Definition logger.hpp:598
~LoggerManager()
析构函数
Definition logger.hpp:611
static LogSink::ptr create(Args &&...args)
创建日志落地对象
Definition sink.hpp:270
同步日志器
Definition logger.hpp:274
void log(const char *data, size_t len) override
直接通过落地模块句柄进行日志输出
Definition logger.hpp:297
SyncLogger(const std::string &loggername, LogLevel::value level, Formatter::ptr &formatter, std::vector< LogSink::ptr > sinks)
构造函数
Definition logger.hpp:284
AsyncType
异步工作器类型
Definition looper.hpp:34
@ ASYNC_UNSAFE
不考虑资源,无限扩容,性能测试
LoggerType
日志器类型
Definition logger.hpp:31
日志消息结构体
Definition message.hpp:24