feat:Doric cli show doric logs
This commit is contained in:
parent
d4c8d08660
commit
ddc74a9027
@ -9,9 +9,12 @@ import org.greenrobot.eventbus.EventBus;
|
|||||||
import org.greenrobot.eventbus.Subscribe;
|
import org.greenrobot.eventbus.Subscribe;
|
||||||
import org.greenrobot.eventbus.ThreadMode;
|
import org.greenrobot.eventbus.ThreadMode;
|
||||||
|
|
||||||
|
|
||||||
import pub.doric.Doric;
|
import pub.doric.Doric;
|
||||||
import pub.doric.DoricContext;
|
import pub.doric.DoricContext;
|
||||||
import pub.doric.DoricContextManager;
|
import pub.doric.DoricContextManager;
|
||||||
|
import pub.doric.DoricLibrary;
|
||||||
|
import pub.doric.DoricRegistry;
|
||||||
import pub.doric.devkit.event.ConnectExceptionEvent;
|
import pub.doric.devkit.event.ConnectExceptionEvent;
|
||||||
import pub.doric.devkit.event.EOFExceptionEvent;
|
import pub.doric.devkit.event.EOFExceptionEvent;
|
||||||
import pub.doric.devkit.event.EnterDebugEvent;
|
import pub.doric.devkit.event.EnterDebugEvent;
|
||||||
@ -31,6 +34,16 @@ public class DevKit implements IDevKit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private DevKit() {
|
private DevKit() {
|
||||||
|
Doric.registerLibrary(new DoricLibrary() {
|
||||||
|
@Override
|
||||||
|
public void load(DoricRegistry registry) {
|
||||||
|
registry.registerMonitor(new DoricDevMonitor());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
for (DoricContext context : DoricContextManager.aliveContexts()) {
|
||||||
|
context.getDriver().getRegistry().registerMonitor(new DoricDevMonitor());
|
||||||
|
break;
|
||||||
|
}
|
||||||
EventBus.getDefault().register(this);
|
EventBus.getDefault().register(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,70 @@
|
|||||||
|
/*
|
||||||
|
* Copyright [2019] [Doric.Pub]
|
||||||
|
*
|
||||||
|
* Licensed 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.
|
||||||
|
*/
|
||||||
|
package pub.doric.devkit;
|
||||||
|
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
|
||||||
|
import java.io.StringWriter;
|
||||||
|
|
||||||
|
import pub.doric.DoricContext;
|
||||||
|
import pub.doric.IDoricMonitor;
|
||||||
|
import pub.doric.utils.DoricLog;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Description: pub.doric.devkit
|
||||||
|
* @Author: pengfei.zhou
|
||||||
|
* @CreateDate: 2/5/21
|
||||||
|
*/
|
||||||
|
public class DoricDevMonitor implements IDoricMonitor {
|
||||||
|
@Override
|
||||||
|
public void onException(DoricContext context, Exception e) {
|
||||||
|
if (!DoricDev.getInstance().isInDevMode()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
JsonObject jsonObject = new JsonObject();
|
||||||
|
jsonObject.addProperty("source", "In source file: " + (context != null ? context.getSource() : "Unknown"));
|
||||||
|
StringWriter stringWriter = new StringWriter();
|
||||||
|
jsonObject.addProperty("exception", stringWriter.toString());
|
||||||
|
DevKit.getInstance().sendDevCommand(IDevKit.Command.EXCEPTION, jsonObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLog(int type, String message) {
|
||||||
|
if (!DoricDev.getInstance().isInDevMode()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String typeString = "DEFAULT";
|
||||||
|
switch (type) {
|
||||||
|
case Log.ERROR:
|
||||||
|
DoricLog.suffix_e("_js", message);
|
||||||
|
typeString = "ERROR";
|
||||||
|
break;
|
||||||
|
case Log.WARN:
|
||||||
|
DoricLog.suffix_w("_js", message);
|
||||||
|
typeString = "WARN";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
DoricLog.suffix_d("_js", message);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
JsonObject jsonObject = new JsonObject();
|
||||||
|
jsonObject.addProperty("type", typeString);
|
||||||
|
jsonObject.addProperty("message", message);
|
||||||
|
DevKit.getInstance().sendDevCommand(IDevKit.Command.LOG, jsonObject);
|
||||||
|
}
|
||||||
|
}
|
@ -60,12 +60,20 @@ export default async function dev() {
|
|||||||
await delay(3000);
|
await delay(3000);
|
||||||
console.warn("Start watching");
|
console.warn("Start watching");
|
||||||
server.listen(7777);
|
server.listen(7777);
|
||||||
|
const cachedContents: Record<string, string> = {}
|
||||||
chokidar
|
chokidar
|
||||||
.watch(process.cwd() + "/bundle", {
|
.watch(process.cwd() + "/bundle", {
|
||||||
ignored: /.*?\.map/,
|
ignored: /.*?\.map/,
|
||||||
alwaysStat: true,
|
alwaysStat: true,
|
||||||
})
|
})
|
||||||
.on("change", (jsFile) => {
|
.on("change", (jsFile) => {
|
||||||
|
const content = fs.readFileSync(jsFile, "utf-8");
|
||||||
|
if (cachedContents[jsFile]) {
|
||||||
|
if (content.indexOf(cachedContents[jsFile]) >= 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cachedContents[jsFile] = content;
|
||||||
console.log("*******", jsFile.replace(process.cwd(), "")
|
console.log("*******", jsFile.replace(process.cwd(), "")
|
||||||
.replace("/bundle/src/", "")
|
.replace("/bundle/src/", "")
|
||||||
.replace(".js", "")
|
.replace(".js", "")
|
||||||
@ -74,23 +82,21 @@ export default async function dev() {
|
|||||||
console.log("debugging, hot reload by pass");
|
console.log("debugging, hot reload by pass");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
fs.readFile(jsFile, "utf-8", (error, data) => {
|
try {
|
||||||
try {
|
const sourceMap = mergeMap(`${jsFile}.map`);
|
||||||
const sourceMap = mergeMap(`${jsFile}.map`);
|
server.connections.forEach((e: any) => {
|
||||||
server.connections.forEach((e: any) => {
|
e.sendText(
|
||||||
e.sendText(
|
JSON.stringify({
|
||||||
JSON.stringify({
|
cmd: "RELOAD",
|
||||||
cmd: "RELOAD",
|
script: content,
|
||||||
script: data,
|
source: (jsFile.match(/[^/\\]*$/) || [""])[0],
|
||||||
source: (jsFile.match(/[^/\\]*$/) || [""])[0],
|
sourceMap,
|
||||||
sourceMap,
|
})
|
||||||
})
|
);
|
||||||
);
|
});
|
||||||
});
|
} catch (e) {
|
||||||
} catch (e) {
|
console.error(e);
|
||||||
console.error(e);
|
}
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
@ -50,11 +50,11 @@ export async function createServer() {
|
|||||||
break;
|
break;
|
||||||
case 'LOG':
|
case 'LOG':
|
||||||
if (resultObject.data.type == 'DEFAULT') {
|
if (resultObject.data.type == 'DEFAULT') {
|
||||||
console.log((resultObject.data.message as string).green);
|
console.log(`>>>>>>${(resultObject.data.message as string).green}>>>>>>`);
|
||||||
} else if (resultObject.data.type == 'ERROR') {
|
} else if (resultObject.data.type == 'ERROR') {
|
||||||
console.log((resultObject.data.message as string).red);
|
console.log(`>>>>>>${(resultObject.data.message as string).red}>>>>>>`);
|
||||||
} else if (resultObject.data.type == 'WARN') {
|
} else if (resultObject.data.type == 'WARN') {
|
||||||
console.log((resultObject.data.message as string).yellow);
|
console.log(`>>>>>>${(resultObject.data.message as string).yellow}>>>>>>`);
|
||||||
}
|
}
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,16 @@
|
|||||||
#import "DoricWSClient.h"
|
#import "DoricWSClient.h"
|
||||||
#import "DoricDebugDriver.h"
|
#import "DoricDebugDriver.h"
|
||||||
#import "DoricDevViewController.h"
|
#import "DoricDevViewController.h"
|
||||||
|
#import "DoricDevMonitor.h"
|
||||||
|
|
||||||
|
@interface DoricDevLibrary : DoricLibrary
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation DoricDevLibrary
|
||||||
|
- (void)load:(DoricRegistry *)registry {
|
||||||
|
|
||||||
|
}
|
||||||
|
@end
|
||||||
|
|
||||||
@interface DoricDev ()
|
@interface DoricDev ()
|
||||||
@property(nonatomic, strong) DoricWSClient *wsclient;
|
@property(nonatomic, strong) DoricWSClient *wsclient;
|
||||||
@ -46,6 +56,12 @@ - (instancetype)init {
|
|||||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onEnterDebugEvent) name:@"EnterDebugEvent" object:nil];
|
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onEnterDebugEvent) name:@"EnterDebugEvent" object:nil];
|
||||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onStopDebugEvent) name:@"StopDebugEvent" object:nil];
|
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onStopDebugEvent) name:@"StopDebugEvent" object:nil];
|
||||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onDebuggerReadyEvent) name:@"DebuggerReadyEvent" object:nil];
|
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onDebuggerReadyEvent) name:@"DebuggerReadyEvent" object:nil];
|
||||||
|
[Doric registerLibrary:[DoricDevLibrary new]];
|
||||||
|
NSValue *value = DoricContextManager.instance.aliveContexts.firstObject;
|
||||||
|
if (value) {
|
||||||
|
DoricContext *context = value.nonretainedObjectValue;
|
||||||
|
[context.driver.registry registerMonitor:[DoricDevMonitor new]];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
16
doric-iOS/Devkit/Classes/DoricDevMonitor.h
Normal file
16
doric-iOS/Devkit/Classes/DoricDevMonitor.h
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
//
|
||||||
|
// DoricDevMonitor.h
|
||||||
|
// DoricDevkit
|
||||||
|
//
|
||||||
|
// Created by pengfei.zhou on 2021/2/5.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
#import "DoricMonitorProtocol.h"
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface DoricDevMonitor : NSObject <DoricMonitorProtocol>
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
55
doric-iOS/Devkit/Classes/DoricDevMonitor.m
Normal file
55
doric-iOS/Devkit/Classes/DoricDevMonitor.m
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
//
|
||||||
|
// DoricDevMonitor.m
|
||||||
|
// DoricDevkit
|
||||||
|
//
|
||||||
|
// Created by pengfei.zhou on 2021/2/5.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "DoricDevMonitor.h"
|
||||||
|
|
||||||
|
#import "DoricDev.h"
|
||||||
|
#import "NSString+JsonString.h"
|
||||||
|
#import "Doric.h"
|
||||||
|
|
||||||
|
@implementation DoricDevMonitor
|
||||||
|
- (void)onException:(NSException *)exception inContext:(DoricContext *)context {
|
||||||
|
if (!DoricDev.instance.isInDevMode) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
NSDictionary *jsonDic = @{
|
||||||
|
@"cmd": @"EXCEPTION",
|
||||||
|
@"data": @{
|
||||||
|
@"source": [context.source stringByReplacingOccurrencesOfString:@".js" withString:@".ts"],
|
||||||
|
@"exception": exception.reason
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
NSString *jsonStr = [NSString dc_convertToJsonWithDic:jsonDic];
|
||||||
|
[[DoricDev instance] sendDevCommand:jsonStr];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)onLog:(DoricLogType)type message:(NSString *)message {
|
||||||
|
if (!DoricDev.instance.isInDevMode) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
NSString *typeString = @"DEFAULT";
|
||||||
|
if (type == DoricLogTypeDebug) {
|
||||||
|
typeString = @"DEFAULT";
|
||||||
|
} else if (type == DoricLogTypeWarning) {
|
||||||
|
typeString = @"WARN";
|
||||||
|
} else if (type == DoricLogTypeError) {
|
||||||
|
typeString = @"ERROR";
|
||||||
|
}
|
||||||
|
|
||||||
|
NSDictionary *jsonDic = @{
|
||||||
|
@"cmd": @"LOG",
|
||||||
|
@"data": @{
|
||||||
|
@"type": typeString,
|
||||||
|
@"message": message
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
NSString *jsonStr = [NSString dc_convertToJsonWithDic:jsonDic];
|
||||||
|
[[DoricDev instance] sendDevCommand:jsonStr];
|
||||||
|
}
|
||||||
|
@end
|
Reference in New Issue
Block a user