C++ Debug打印及输出日志
😊💕😁👍🙌🤦♀️🤦♂️🤷♀️🤷♂️😜💖😢🎶😎🤞✌👏💋🌹🎉🎂🤳🐱👤🐱🏍✨😃👀🐱🚀🐱🚀🐱🐉
简易日志输出
#define LOGGING(...) //定义LOGGING宏
LOGGING( "currnet value :%d " ,value) //使用
#define LOGGING(...) \
{ \
fprintf(stderr, "%s: Line %d: ", __FILE__, __LINE__); \
fprintf(stderr, __VA_ARGS__); \
fprintf(stderr, "\n"); \
}
附带level的log
#define LOGGER_INFO(fmt, args…) LOGGER_INTERNER(“INFO”, fmt, ##args)
#define LOGGER_WARN(fmt, args…) LOGGER_INTERNER(“WARN”, fmt, ##args)
#define LOGGER_FAIT(fmt, args…) LOGGER_INTERNER(“FAIT”, fmt, ##args)
#ifdef DEBUG
#define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__)
#define LOGGER(fmt, args...) \
fprintf(stderr, "\033[1;31mTRC_PR(%s:%s:%d):\033[0m" fmt "\n", __FILENAME__, \
__func__, __LINE__, ##args)
#else
#define LOGGER(fmt, args...)
#endif
#define LOGGER_INTERNER(level, fmt, args...) fprintf(stdout, "[%s]" fmt "\n", level, ##args)
日志文件定制
LOG_ET(fmt::format("ip:{},port:{} ", ip, port))
#include "spdlog/async.h"
#include "spdlog/spdlog.h"
#include "spdlog/sinks/rotating_file_sink.h"
class Logger {
private:
Logger() {
file_logger = spdlog::rotating_logger_mt<spdlog::async_factory>(
"system_info", "log/service.log", 30 * 1024 * 1024, 5);
file_logger->set_pattern("%v");
file_logger->set_level(spdlog::level::info);
}
std::shared_ptr<spdlog::logger> file_logger;
public:
static Logger Instance() {
static Logger log;
return log;
}
spdlog::logger *GetLogger(){
return file_logger.get();
}
};
#define LOG_ET(format, args...) \
SPDLOG_LOGGER_INFO(Logger::Instance().GetLogger(), format, ##args);
}