165 lines
5.0 KiB
TypeScript
165 lines
5.0 KiB
TypeScript
let Arrays = Java.type('java.util.Arrays');
|
|
let Level = Java.type('java.util.logging.Level');
|
|
let ignoreLogPrefix = ['java.', 'net.minecraft.', 'org.bukkit.', 'jdk.nashorn.', 'io.netty.', 'org.spongepowered.'];
|
|
|
|
enum LogLevel {
|
|
ALL,
|
|
TRACE,
|
|
DEBUG,
|
|
INFO,
|
|
WARN,
|
|
ERROR,
|
|
FATAL,
|
|
OFF
|
|
}
|
|
|
|
export class MiaoScriptConsole implements Console {
|
|
Console: NodeJS.ConsoleConstructor;
|
|
|
|
private _name: string = '';
|
|
private _level: LogLevel = global.debug ? LogLevel.DEBUG : LogLevel.INFO;
|
|
|
|
protected logger: any;
|
|
protected prefix: string = '§6[§bMiaoScript§6]§r ';
|
|
|
|
constructor(name?: string) {
|
|
this.name = name;
|
|
this.logger = global.logger;
|
|
}
|
|
|
|
get name() {
|
|
return this._name;
|
|
}
|
|
|
|
set name(name: string) {
|
|
if (name) {
|
|
this._name = `[${name}] `;
|
|
// noinspection JSUnusedGlobalSymbols
|
|
this.prefix = `§6[§cMS§6][§b${name}§6]§r `;
|
|
}
|
|
}
|
|
log(...args: any[]): void {
|
|
this.logger.info(this.name + args.join(' '));
|
|
}
|
|
info(...args: any[]) {
|
|
this.logger.info(this.name + args.join(' '));
|
|
}
|
|
warn(...args: any[]) {
|
|
this.logger.warning(this.name + args.join(' '));
|
|
}
|
|
error(...args: any[]) {
|
|
this.logger.log(Level.SEVERE, this.name + args.join(' '));
|
|
}
|
|
debug(...args: any[]) {
|
|
if (global.debug) {
|
|
this.logger.info(this.name + '[DEBUG] ' + args.join(' '));
|
|
}
|
|
}
|
|
trace(...args: any[]): void {
|
|
if (this._level <= LogLevel.TRACE) {
|
|
this.logger.info(this.name + '[TRACE] ' + args.join(' '));
|
|
}
|
|
}
|
|
sender(...args) {
|
|
this.info(args)
|
|
}
|
|
console(...args) {
|
|
this.info(args)
|
|
}
|
|
object(obj) {
|
|
for (var i in obj) {
|
|
this.logger(i, '=>', obj[i])
|
|
}
|
|
}
|
|
ex(ex: Error) {
|
|
this.stack(ex).forEach(line => this.console(line))
|
|
}
|
|
stack(ex: Error): string[] {
|
|
var stack = ex.getStackTrace();
|
|
var cache = ['§4' + ex];
|
|
//@ts-ignore
|
|
if (stack.class) {
|
|
stack = Arrays.asList(stack)
|
|
}
|
|
stack.forEach(function(trace) {
|
|
if (trace.className.startsWith('<')) {
|
|
var fileName = trace.fileName
|
|
if (fileName.startsWith(root)) { fileName = fileName.split(root)[1] }
|
|
cache.push(` §e->§c ${fileName} => §4${trace.methodName}:${trace.lineNumber}`)
|
|
} else {
|
|
var className = trace.className;
|
|
var fileName = trace.fileName
|
|
if (className.startsWith('jdk.nashorn.internal.scripts')) {
|
|
className = className.substr(className.lastIndexOf('$') + 1)
|
|
if (fileName.startsWith(root)) { fileName = fileName.split(root)[1] }
|
|
} else {
|
|
for (var prefix in ignoreLogPrefix) {
|
|
if (className.startsWith(ignoreLogPrefix[prefix])) {
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
cache.push(` §e->§c ${className}.${trace.methodName}(§4${fileName}:${trace.lineNumber}§c)`);
|
|
}
|
|
});
|
|
return cache;
|
|
}
|
|
assert(value: any, message?: string, ...optionalParams: any[]): void {
|
|
throw new Error("Method not implemented.");
|
|
}
|
|
clear(): void {
|
|
throw new Error("Method not implemented.");
|
|
}
|
|
count(label?: string): void {
|
|
throw new Error("Method not implemented.");
|
|
}
|
|
countReset(label?: string): void {
|
|
throw new Error("Method not implemented.");
|
|
}
|
|
dir(obj: any, options?: NodeJS.InspectOptions): void {
|
|
throw new Error("Method not implemented.");
|
|
}
|
|
dirxml(...data: any[]): void {
|
|
throw new Error("Method not implemented.");
|
|
}
|
|
group(...label: any[]): void {
|
|
throw new Error("Method not implemented.");
|
|
}
|
|
groupCollapsed(...label: any[]): void {
|
|
throw new Error("Method not implemented.");
|
|
}
|
|
groupEnd(): void {
|
|
throw new Error("Method not implemented.");
|
|
}
|
|
table(tabularData: any, properties?: string[]): void {
|
|
throw new Error("Method not implemented.");
|
|
}
|
|
time(label?: string): void {
|
|
throw new Error("Method not implemented.");
|
|
}
|
|
timeEnd(label?: string): void {
|
|
throw new Error("Method not implemented.");
|
|
}
|
|
timeLog(label?: string, ...data: any[]): void {
|
|
throw new Error("Method not implemented.");
|
|
}
|
|
markTimeline(label?: string): void {
|
|
throw new Error("Method not implemented.");
|
|
}
|
|
profile(label?: string): void {
|
|
throw new Error("Method not implemented.");
|
|
}
|
|
profileEnd(label?: string): void {
|
|
throw new Error("Method not implemented.");
|
|
}
|
|
timeStamp(label?: string): void {
|
|
throw new Error("Method not implemented.");
|
|
}
|
|
timeline(label?: string): void {
|
|
throw new Error("Method not implemented.");
|
|
}
|
|
timelineEnd(label?: string): void {
|
|
throw new Error("Method not implemented.");
|
|
}
|
|
}
|