Skip to content
This repository has been archived by the owner on Jun 3, 2021. It is now read-only.

Commit

Permalink
[Core] Add WeexCore log bridge. (#2398)
Browse files Browse the repository at this point in the history
  • Loading branch information
wqyfavor authored and YorkShen committed May 28, 2019
1 parent de3df30 commit 01f964e
Show file tree
Hide file tree
Showing 7 changed files with 268 additions and 36 deletions.
12 changes: 12 additions & 0 deletions ios/sdk/WeexSDK.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -277,6 +277,10 @@
775BEE4E1C16F993008D1629 /* WXDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = 775BEE4D1C16F993008D1629 /* WXDefine.h */; settings = {ATTRIBUTES = (Public, ); }; };
775BEE6E1C1BD8F4008D1629 /* WXImgLoaderProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 775BEE6C1C1BD8F4008D1629 /* WXImgLoaderProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; };
775BEE711C1BD977008D1629 /* WXModuleProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 775BEE701C1BD977008D1629 /* WXModuleProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; };
7767C8CC22815A60008D465B /* log_defines.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7767C8CB22815A60008D465B /* log_defines.cpp */; };
7767C8CD22815A60008D465B /* log_defines.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7767C8CB22815A60008D465B /* log_defines.cpp */; };
7767C8D622816D5C008D465B /* log_bridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 7767C8D522816D5C008D465B /* log_bridge.h */; };
7767C8D722816D5C008D465B /* log_bridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 7767C8D522816D5C008D465B /* log_bridge.h */; };
77A3D66E222F9F5B0078A6F5 /* WeexApiValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 77A3D66D222F9F5B0078A6F5 /* WeexApiValue.h */; };
77A3D66F222F9F5B0078A6F5 /* WeexApiValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 77A3D66D222F9F5B0078A6F5 /* WeexApiValue.h */; };
77CF6A5621E6E47E00BA8634 /* core_constants.h in Headers */ = {isa = PBXBuildFile; fileRef = 77CF6A5421E6E47D00BA8634 /* core_constants.h */; };
Expand Down Expand Up @@ -1096,6 +1100,8 @@
775BEE4D1C16F993008D1629 /* WXDefine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXDefine.h; sourceTree = "<group>"; };
775BEE6C1C1BD8F4008D1629 /* WXImgLoaderProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXImgLoaderProtocol.h; sourceTree = "<group>"; };
775BEE701C1BD977008D1629 /* WXModuleProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXModuleProtocol.h; sourceTree = "<group>"; };
7767C8CB22815A60008D465B /* log_defines.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = log_defines.cpp; sourceTree = "<group>"; };
7767C8D522816D5C008D465B /* log_bridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = log_bridge.h; sourceTree = "<group>"; };
77A3D66D222F9F5B0078A6F5 /* WeexApiValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WeexApiValue.h; sourceTree = "<group>"; };
77CF6A5421E6E47D00BA8634 /* core_constants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = core_constants.h; sourceTree = "<group>"; };
77CF6A5521E6E47D00BA8634 /* log_defines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = log_defines.h; sourceTree = "<group>"; };
Expand Down Expand Up @@ -2025,6 +2031,7 @@
B8D66B242125572F003960BD /* bridge */ = {
isa = PBXGroup;
children = (
7767C8D522816D5C008D465B /* log_bridge.h */,
BD9205FA223651D800EDF93D /* eagle_bridge.cpp */,
BD9205F9223651D800EDF93D /* eagle_bridge.h */,
B8D66B252125572F003960BD /* platform_bridge.h */,
Expand Down Expand Up @@ -2233,6 +2240,7 @@
isa = PBXGroup;
children = (
77CF6A5421E6E47D00BA8634 /* core_constants.h */,
7767C8CB22815A60008D465B /* log_defines.cpp */,
77CF6A5521E6E47D00BA8634 /* log_defines.h */,
B8F3323B2141A4C500701BA0 /* string_util.h */,
B8D66B892125572F003960BD /* make_copyable.h */,
Expand Down Expand Up @@ -2486,6 +2494,7 @@
2A60CE9C1C91733E00857B9F /* WXSwitchComponent.h in Headers */,
DCDFED011E68238F00C228D7 /* WXJSExceptionProtocol.h in Headers */,
B8D66C0921255730003960BD /* core_environment.h in Headers */,
7767C8D622816D5C008D465B /* log_bridge.h in Headers */,
2A4445BF1CA8FD56009E7C6D /* WXTextComponentProtocol.h in Headers */,
746319021C60AFC100EFEBD4 /* WXThreadSafeCounter.h in Headers */,
744D610C1E49978200B624B3 /* WXHeaderComponent.h in Headers */,
Expand Down Expand Up @@ -2740,6 +2749,7 @@
DCA4461C1EFA5AA600D0CFA8 /* WXModuleFactory.h in Headers */,
DCA445D91EFA59A100D0CFA8 /* WXEditComponent.h in Headers */,
DCA445FB1EFA5A3C00D0CFA8 /* WXStorageModule.h in Headers */,
7767C8D722816D5C008D465B /* log_bridge.h in Headers */,
DCA446051EFA5A5800D0CFA8 /* WXBoxShadow.h in Headers */,
DCA445D11EFA594200D0CFA8 /* WXLayer.h in Headers */,
DCA4460A1EFA5A6F00D0CFA8 /* WXSimulatorShortcutManager.h in Headers */,
Expand Down Expand Up @@ -3033,6 +3043,7 @@
594C28921CF9E61A009793A4 /* WXAnimationModule.m in Sources */,
B8D66C6F21255730003960BD /* render_object.cpp in Sources */,
59A5961D1CB630F10012CD52 /* WXComponent+Navigation.m in Sources */,
7767C8CC22815A60008D465B /* log_defines.cpp in Sources */,
77D161631C02ED790010B15B /* WXLog.m in Sources */,
17C74F0D2072145100AB4CAB /* WXAnalyzerCenter.m in Sources */,
743933B51C7ED9AA00773BB7 /* WXSimulatorShortcutManager.m in Sources */,
Expand Down Expand Up @@ -3194,6 +3205,7 @@
DCA445381EFA55B300D0CFA8 /* WXDebugTool.m in Sources */,
DCA445391EFA55B300D0CFA8 /* WXComponent+PseudoClassManagement.m in Sources */,
DCA4453A1EFA55B300D0CFA8 /* WXView.m in Sources */,
7767C8CD22815A60008D465B /* log_defines.cpp in Sources */,
DCA4453B1EFA55B300D0CFA8 /* WXErrorView.m in Sources */,
74B81AEC1F73C3E900D3A61D /* WXRecycleListLayout.m in Sources */,
DCA4453C1EFA55B300D0CFA8 /* WXComponent+ViewManagement.mm in Sources */,
Expand Down
50 changes: 50 additions & 0 deletions ios/sdk/WeexSDK/Sources/Bridge/WXCoreBridge.mm
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,10 @@
#import <objc/runtime.h>
#include <fstream>

#ifdef DEBUG
#include <os/log.h>
#endif

namespace WeexCore
{
static void consoleWithArguments(NSArray *arguments, WXLogFlag logLevel)
Expand Down Expand Up @@ -937,6 +941,50 @@ static void MergeBorderWidthValues(NSMutableDictionary* dict,
{

}

#pragma mark - Log Bridge

class LogBridgeIOS: public LogBridge {
public:
virtual void log(LogLevel level, const char* file, unsigned long line, const char* log) override {
#ifdef DEBUG
switch (level) {
case LogLevel::Error:
os_log_error(OS_LOG_DEFAULT, "<%s:Error|%s:%lu> %s\n", WEEX_CORE_LOG_TAG, file, line, log);
break;
case LogLevel::Warn:
os_log_error(OS_LOG_DEFAULT, "<%s:Warn|%s:%lu> %s\n", WEEX_CORE_LOG_TAG, file, line, log);
break;
case LogLevel::Info:
os_log_info(OS_LOG_DEFAULT, "<%s:Info|%s:%lu> %s\n", WEEX_CORE_LOG_TAG, file, line, log);
break;
case LogLevel::Debug:
os_log_debug(OS_LOG_DEFAULT, "<%s:Debug|%s:%lu> %s\n", WEEX_CORE_LOG_TAG, file, line, log);
break;
default:
break;
}
#else
WXLogFlag wxLogLevel;
switch (level) {
case LogLevel::Error:
wxLogLevel = WXLogFlagError;
break;
case LogLevel::Warn:
wxLogLevel = WXLogFlagWarning;
break;
case LogLevel::Info:
wxLogLevel = WXLogFlagInfo;
break;
default:
wxLogLevel = WXLogFlagDebug;
break;
}

[WXLog devLog:wxLogLevel file:file line:line format:@"<%s> %s", WEEX_CORE_LOG_TAG, log];
#endif
}
};
}

@implementation WXCoreBridge
Expand All @@ -958,6 +1006,8 @@ + (void)install
env->AddOption("screen_width_pixels", std::to_string(screenSize.width));
env->AddOption("screen_height_pixels", std::to_string(screenSize.height));

WeexCore::WeexCoreManager::Instance()->set_log_bridge(new WeexCore::LogBridgeIOS());

platformBridge = new WeexCore::PlatformBridge();
platformBridge->set_platform_side(new WeexCore::IOSSide());
platformBridge->set_core_side(new WeexCore::CoreSideInPlatform());
Expand Down
1 change: 1 addition & 0 deletions weex_core/Source/base/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ set(${BASE_LIBRARY_NAME}_SOURCES
#CoreConstants.h
core_constants.h
log_defines.h
log_defines.cpp
time_utils.h
base64/base64.h
base64/base64.cpp
Expand Down
127 changes: 127 additions & 0 deletions weex_core/Source/base/log_defines.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/

#include "log_defines.h"
#include <string>
#include <array>

#ifdef __ANDROID__
#include <android/log.h>
#elif __APPLE__
#include <os/log.h>
#endif

#include "core/manager/weex_core_manager.h"

namespace WeexCore {

struct LogFlattenHelper {
LogFlattenHelper() : mLargeBuf() {}
LogFlattenHelper(const char *fmt, va_list args) : LogFlattenHelper() {
set(fmt, args);
}
~LogFlattenHelper() {
if (mLargeBuf)
free(mLargeBuf);
}

const char *str() const { return mLargeBuf ? mLargeBuf : mSmallBuf.data(); }
LogFlattenHelper &set(const char *fmt, va_list args);

private:
LogFlattenHelper(const LogFlattenHelper &) = delete;
void operator=(const LogFlattenHelper &) = delete;

std::array<char, 4096> mSmallBuf;
char *mLargeBuf;
};

LogFlattenHelper &LogFlattenHelper::set(const char *fmt, va_list args) {
va_list argsCopy;
va_copy(argsCopy, args);
int len = 1 + vsnprintf(nullptr, 0, fmt, argsCopy);
va_end(argsCopy);
if (len <= 1) {
mSmallBuf[0] = 0;
return *this;
}
if (len > (int)mSmallBuf.size())
mLargeBuf = static_cast<char *>(malloc(len));
int rv;
if (mLargeBuf) {
rv = vsnprintf(mLargeBuf, len, fmt, args);
} else {
rv = vsnprintf(mSmallBuf.data(), mSmallBuf.size(), fmt, args);
}
(void)rv;
return *this;
}

void PrintLog(LogLevel level, const char* file, unsigned long line, const char* fmt, ...) {
va_list args;
va_start(args, fmt);
LogFlattenHelper log(fmt, args);
va_end(args);

LogBridge* logBridge = WeexCore::WeexCoreManager::Instance()->get_log_bridge();
if (logBridge) {
// Log to bridge
logBridge->log(level, file, line, log.str());
}
else {
// Log to console by default
#ifdef __ANDROID__
switch (level) {
case LogLevel::Error:
__android_log_print(ANDROID_LOG_ERROR, WEEX_CORE_LOG_TAG, "%s:%lu, %s", file, line, log.str());
break;
case LogLevel::Warn:
__android_log_print(ANDROID_LOG_WARN, WEEX_CORE_LOG_TAG, "%s:%lu, %s", file, line, log.str());
break;
case LogLevel::Info:
__android_log_print(ANDROID_LOG_INFO, WEEX_CORE_LOG_TAG, "%s:%lu, %s", file, line, log.str());
break;
case LogLevel::Debug:
__android_log_print(ANDROID_LOG_DEBUG, WEEX_CORE_LOG_TAG, "%s:%lu, %s", file, line, log.str());
break;
default:
break;
}
#elif __APPLE__
switch (level) {
case LogLevel::Error:
os_log_error(OS_LOG_DEFAULT, "<%s:Error|%s:%lu> %s\n", WEEX_CORE_LOG_TAG, file, line, log.str());
break;
case LogLevel::Warn:
os_log_error(OS_LOG_DEFAULT, "<%s:Warn|%s:%lu> %s\n", WEEX_CORE_LOG_TAG, file, line, log.str());
break;
case LogLevel::Info:
os_log_info(OS_LOG_DEFAULT, "<%s:Info|%s:%lu> %s\n", WEEX_CORE_LOG_TAG, file, line, log.str());
break;
case LogLevel::Debug:
os_log_debug(OS_LOG_DEFAULT, "<%s:Debug|%s:%lu> %s\n", WEEX_CORE_LOG_TAG, file, line, log.str());
break;
default:
break;
}
#endif
}
}

}
74 changes: 38 additions & 36 deletions weex_core/Source/base/log_defines.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,62 +20,64 @@
#ifndef LogDefines_h
#define LogDefines_h

#define LOG_TAG "WeexCore"

#ifdef __ANDROID__ //for android platform

#include <android/log.h>

#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
#define LOGA(...) ((void)0) //__android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
#define LOGD(...) ((void)0) //__android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)

#ifdef DEBUG
namespace WeexCore {

enum class LogLevel : int {
Debug,
Info,
Warn,
Error
};

void PrintLog(LogLevel level, const char* file, unsigned long line, const char* format, ...);

}

#if defined(LOGE)
#undef LOGE
#endif

#define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, __VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN, LOG_TAG, __VA_ARGS__)
#define LOG_LINE LOGV("%s, %d", __func__, __LINE__)
#if defined(LOGW)
#undef LOGW
#endif

#else
#if defined(LOGI)
#undef LOGI
#endif

#define LOGV(...) ((void) 0)
#define LOGD(...) ((void) 0)
#define LOGI(...) ((void) 0)
#define LOGW(...) ((void) 0)
#define LOG_LINE
#if defined(LOGD)
#undef LOGD
#endif

#if defined(LOGV)
#undef LOGV
#endif

#elif __APPLE__
#define WEEX_CORE_LOG_TAG "WeexCore"
#define WEEX_CORE_FILENAME (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__)
#define WEEX_CORE_LOG(level, format, ...) WeexCore::PrintLog((level), WEEX_CORE_FILENAME, __LINE__, (format), ##__VA_ARGS__)

#define LOGE(...) printf(__VA_ARGS__)
#define LOGA(...) printf(__VA_ARGS__)
#define LOGE(format, ...) WEEX_CORE_LOG(WeexCore::LogLevel::Error, format, ##__VA_ARGS__)
#define LOGW(format, ...) WEEX_CORE_LOG(WeexCore::LogLevel::Warn, format, ##__VA_ARGS__)
#define LOGI(format, ...) WEEX_CORE_LOG(WeexCore::LogLevel::Info, format, ##__VA_ARGS__)

#ifdef DEBUG

#define LOGV(...) printf(__VA_ARGS__)
#define LOGD(...) printf(__VA_ARGS__)
#define LOGI(...) printf(__VA_ARGS__)
#define LOGW(...) printf(__VA_ARGS__)
#define LOG_LINE LOGV("%s, %d", __func__, __LINE__)
#define LOGD(format, ...) WEEX_CORE_LOG(WeexCore::LogLevel::Debug, format, ##__VA_ARGS__)

#else

#define LOGV(...) ((void) 0)
#define LOGD(...) ((void) 0)
#define LOGI(...) ((void) 0)
#define LOGW(...) ((void) 0)
#define LOG_LINE
#define LOGD(format, ...) ((void) 0)

#endif

#define LOGV LOGD
#define LOG_LINE ((void) 0)

#ifndef DISALLOW_COPY_AND_ASSIGN
#define DISALLOW_COPY_AND_ASSIGN(TypeName) \
TypeName(const TypeName&) = delete; \
void operator=(const TypeName&) = delete
#endif

#endif //__ANDROID__

#endif /* LogDefines_h */
Loading

0 comments on commit 01f964e

Please sign in to comment.