提交 cd3912f4 编写于 作者: 杨时权

【需求】新增日志回调能力。

上级 4f2c673d
#ifndef LWLogger_h
#define LWLogger_h
#include <string>
namespace LW {
typedef enum LoggerInfo {
kLoggerInfo_Debug = 0,
kLoggerInfo_Warning,
kLoggerInfo_Info,
kLoggerInfo_Error,
kLoggerInfo_Assert,
} LoggerInfo;
class LoggerCallBack {
public:
LoggerCallBack() = default;
virtual ~LoggerCallBack() = default;
virtual void onCallBack(LoggerInfo info, const char* message, int length) = 0;
};
class Logger {
public:
static Logger* getInstance();
public:
explicit Logger(LoggerCallBack* callBack);
~Logger();
void log(LoggerInfo info, const char* func, int line, const char* format, ...);
void setLoggerCallBack(LoggerCallBack* callBack);
void setLoggerBufferSize(int maxBufferSize);
void setLoggerInfo(LoggerInfo info);
private:
LoggerCallBack* callBack_;
LoggerInfo info_;
int max_buffer_size_;
};
}
#define LWLOGD(format, ...) LW::Logger::getInstance()->log(kLoggerInfo_Debug, __FUNCTION__, __LINE__, format, ##__VA_ARGS__)
#define LWLOGW(format, ...) LW::Logger::getInstance()->log(kLoggerInfo_Warning, __FUNCTION__, __LINE__, format, ##__VA_ARGS__)
#define LWLOGI(format, ...) LW::Logger::getInstance()->log(kLoggerInfo_Info, __FUNCTION__, __LINE__, format, ##__VA_ARGS__)
#define LWLOGE(format, ...) LW::Logger::getInstance()->log(kLoggerInfo_Error, __FUNCTION__, __LINE__, format, ##__VA_ARGS__)
#define LWLOGA(format, ...) LW::Logger::getInstance()->log(kLoggerInfo_Assert, __FUNCTION__, __LINE__, format, ##__VA_ARGS__)
#endif /* LWLogger_h */
......@@ -7,6 +7,7 @@
objects = {
/* Begin PBXBuildFile section */
A21B504D26E709430038281E /* LWLogger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A21B504C26E709430038281E /* LWLogger.cpp */; };
A272199A26E1C3E300501840 /* LWURL.cc in Sources */ = {isa = PBXBuildFile; fileRef = A272199926E1C3E300501840 /* LWURL.cc */; };
A2847B9026CE7B1D00AF0E60 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A2847B8F26CE7B1D00AF0E60 /* AppDelegate.m */; };
A2847B9326CE7B1D00AF0E60 /* SceneDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A2847B9226CE7B1D00AF0E60 /* SceneDelegate.m */; };
......@@ -29,6 +30,8 @@
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
A21B504B26E7092F0038281E /* LWLogger.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LWLogger.h; sourceTree = "<group>"; };
A21B504C26E709430038281E /* LWLogger.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = LWLogger.cpp; sourceTree = "<group>"; };
A272199826E1C3B700501840 /* LWURL.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LWURL.h; sourceTree = "<group>"; };
A272199926E1C3E300501840 /* LWURL.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = LWURL.cc; sourceTree = "<group>"; };
A2847B8B26CE7B1D00AF0E60 /* LWAVFoundation.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = LWAVFoundation.app; sourceTree = BUILT_PRODUCTS_DIR; };
......@@ -117,6 +120,7 @@
A272199E26E1C7BF00501840 /* logger */ = {
isa = PBXGroup;
children = (
A21B504B26E7092F0038281E /* LWLogger.h */,
);
path = logger;
sourceTree = "<group>";
......@@ -124,6 +128,7 @@
A272199F26E1C7C600501840 /* logger */ = {
isa = PBXGroup;
children = (
A21B504C26E709430038281E /* LWLogger.cpp */,
);
path = logger;
sourceTree = "<group>";
......@@ -288,6 +293,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
A21B504D26E709430038281E /* LWLogger.cpp in Sources */,
A272199A26E1C3E300501840 /* LWURL.cc in Sources */,
A2847D8626CFB6BC00AF0E60 /* LWCheckBoxView.m in Sources */,
A2847DC326D1FC2800AF0E60 /* LWVideoCaptureSession.m in Sources */,
......
#include <stdio.h>
#include <mutex>
#include "LWLogger.h"
namespace LW {
class DefaultLoggerCallBack : public LoggerCallBack {
public:
DefaultLoggerCallBack() : LoggerCallBack() {
}
virtual ~DefaultLoggerCallBack() {
}
virtual void onCallBack(LoggerInfo info, const char* message, int length) override {
#ifdef __APPLE__
printf("%s\n", message);
#else
#endif
}
};
static DefaultLoggerCallBack* kDefaultLoggerCallBack;
}
namespace LW {
Logger* Logger::getInstance() {
static Logger* logger = nullptr;
static std::once_flag flag1;
std::call_once(flag1, [](DefaultLoggerCallBack** callback, Logger** logger) -> void {
if (callback && !(*callback)) {
*callback = new DefaultLoggerCallBack;
}
if (logger && !(*logger)) {
*logger = new Logger(kDefaultLoggerCallBack);
}
}, &kDefaultLoggerCallBack, &logger);
return logger;
}
Logger::Logger(LoggerCallBack* callBack) {
if (callBack == nullptr) {
callBack_ = kDefaultLoggerCallBack;
} else {
callBack_ = callBack;
}
info_ = kLoggerInfo_Info;
max_buffer_size_ = 2048;
}
Logger::~Logger() {
callBack_ = nullptr;
}
void Logger::log(LoggerInfo info, const char *func, int line, const char *format, ...) {
if (info < info_) {
return;
}
va_list va_pointer;
int pos = 0;
va_start(va_pointer, format);
// todo memory pool
char* buffer = new char[max_buffer_size_];
pos = snprintf(buffer, max_buffer_size_, "[%s:%d]", func, line);
pos += vsnprintf(buffer + pos, max_buffer_size_ - pos, format, va_pointer);
va_end(va_pointer);
if (callBack_) {
callBack_->onCallBack(info, buffer, pos);
}
delete [] buffer;
}
void Logger::setLoggerInfo(LoggerInfo info) {
info_ = info;
}
void Logger::setLoggerBufferSize(int maxBufferSize) {
if (maxBufferSize == max_buffer_size_) {
return;
}
max_buffer_size_ = maxBufferSize;
}
void Logger::setLoggerCallBack(LoggerCallBack *callBack) {
callBack_ = callBack;
}
}
......@@ -7,6 +7,7 @@
#include <sstream>
#include "LWURL.h"
#include "LWLogger.h"
namespace LW {
......@@ -139,6 +140,7 @@ bool URL::parseUrl(const std::string& url) {
ostr << "}),port(" << port_ << "),url:(" << url_ << ")";
description_ = ostr.str();
LWLOGI("description:%s", description().c_str());
return true;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册