From fd44dc5d50a497da8bc4dce236ed9ec77e0dc8bd Mon Sep 17 00:00:00 2001 From: duke Date: Mon, 14 Oct 2024 10:54:13 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20=E9=98=B2=E6=AD=A2Hilog=E6=89=93?= =?UTF-8?q?=E5=8D=B0=E9=95=BF=E5=BA=A6=E9=99=90=E5=88=B6=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E7=9A=84=E5=86=85=E5=AE=B9=E6=88=AA=E5=8F=96=E4=B8=8D=E6=98=BE?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/ets/appender/ConsoleAppender.ts | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/library/src/main/ets/appender/ConsoleAppender.ts b/library/src/main/ets/appender/ConsoleAppender.ts index 903e69e..efed49d 100644 --- a/library/src/main/ets/appender/ConsoleAppender.ts +++ b/library/src/main/ets/appender/ConsoleAppender.ts @@ -29,13 +29,33 @@ export class ConsoleAppender extends AbstractAppender { if (lvl._intLevel > this.level._intLevel) { return this; } + const maxSize = 1024 + if (message.length <= maxSize) { + // 长度小于等于限制直接打印 + this._onLog(lvl, tag, time, count, message, tempContext); + } else { + let length = message.length + for (let i = 0; i < length; i += maxSize) { + let temp = message.slice(i, i+maxSize) + // 打印剩余日志 + if(temp.length == 0){ + break + } + this._onLog(lvl, tag, time, count, temp, tempContext); + } + } + + return this; + } + + private _onLog(lvl: Level, tag: string, time: number, count: number, message: string, + tempContext: TemporaryLoggerContext) { if (!this.useHilog) { this.getLogFunction(lvl)(this.makeMessage(lvl, tag, time, count, message, tempContext)); return this; } this.getHilogFunction(lvl)(this.domain, tag, this.makeMessage(lvl, tag, time, count, message, tempContext)) - return this; } constructor(level: Level = Level.ALL, useHilog: boolean = false, domain: number = 0x0) { -- Gitee From 26916a444151cda33bc5490e0171517191c6d34b Mon Sep 17 00:00:00 2001 From: duke Date: Mon, 14 Oct 2024 11:33:09 +0800 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20=E6=8E=A7=E5=88=B6=E5=8F=B0?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E4=B8=8D=E9=9A=8Flogger=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=EF=BC=8C=E5=8F=AF=E4=BB=A5=E5=9C=A8=E6=AD=A3=E5=BC=8F=E6=83=85?= =?UTF-8?q?=E5=86=B5=E4=B8=8B=E7=A7=BB=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- library/src/main/ets/LogManager.ts | 8 +++++++- library/src/main/ets/abstract/AbstractLogger.ts | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/library/src/main/ets/LogManager.ts b/library/src/main/ets/LogManager.ts index 2f623f0..80d2c11 100644 --- a/library/src/main/ets/LogManager.ts +++ b/library/src/main/ets/LogManager.ts @@ -20,6 +20,7 @@ import fs from '@ohos.file.fs'; import { AbstractAppender } from './abstract/AbstractAppender'; import ArrayList from '@ohos.util.ArrayList'; import { FileUtils } from './utils/FileUtils'; +import { ConsoleAppender } from './appender/ConsoleAppender'; class Anonymous { } @@ -44,6 +45,10 @@ class LogManagerClass { debug: console.debug } + constructor() { + this.preBindAppender(new ConsoleAppender()) + } + /** * 获取Class或Struct的Logger * @param context 类或类名 @@ -149,7 +154,8 @@ class LogManagerClass { console[type] = (...args: any[]) => { let format = ''; for (let i = 0; i < args.length; i++) { - format += '{} '; + let type = typeof args[i] == 'object' ? '%j ' : '%s ' + format += type; } let Console = this.console(); if (type == 'log') { diff --git a/library/src/main/ets/abstract/AbstractLogger.ts b/library/src/main/ets/abstract/AbstractLogger.ts index 808a90c..e0f9f43 100644 --- a/library/src/main/ets/abstract/AbstractLogger.ts +++ b/library/src/main/ets/abstract/AbstractLogger.ts @@ -22,6 +22,7 @@ import { ConsoleAppender } from '../appender/ConsoleAppender'; import { FileAppender, FileAppenderOptions } from '../appender/FileAppender'; import { FileAppenderManager } from '../FileAppenderManager'; import { SMTPAppender } from '../appender/SMTPAppender'; +import { util } from '@kit.ArkTS'; export abstract class AbstractLogger { protected context: any; @@ -34,7 +35,6 @@ export abstract class AbstractLogger { constructor(context: any) { this.context = context; - this.bindAppender(new ConsoleAppender()); } /** -- Gitee From aa65fefe90de66b1847570ad923f433f8b40b7ea Mon Sep 17 00:00:00 2001 From: duke Date: Mon, 14 Oct 2024 11:35:02 +0800 Subject: [PATCH 3/3] =?UTF-8?q?feat:=20=E4=BD=BF=E7=94=A8=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E5=8C=96=E5=AD=97=E7=AC=A6=E4=B8=B2=EF=BC=8C=E5=87=8F?= =?UTF-8?q?=E5=B0=91=E5=A4=A7=E5=AF=B9=E8=B1=A1=E6=97=A5=E5=BF=97oom?= =?UTF-8?q?=E7=9A=84=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- library/README.md | 2 +- library/README_en.md | 2 +- library/example/Index.ets | 10 ++++---- library/src/main/ets/Decorators.ts | 23 ++++++++++--------- library/src/main/ets/FileManager.ts | 2 +- .../src/main/ets/abstract/AbstractLogger.ts | 19 +-------------- .../src/main/ets/appender/DatabaseAppender.ts | 2 +- library/src/main/ets/appender/SMTPAppender.ts | 4 ++-- .../main/ets/appender/TCPSocketAppender.ts | 6 ++--- .../main/ets/appender/UDPSocketAppender.ts | 2 +- .../src/main/ets/benchmark/BenchmarkBase.ts | 2 +- library/src/test/LocalUnit.test.ets | 2 +- 12 files changed, 30 insertions(+), 46 deletions(-) diff --git a/library/README.md b/library/README.md index 9a99b7a..0c07ca3 100644 --- a/library/README.md +++ b/library/README.md @@ -70,7 +70,7 @@ class LogTestClass { private logger: Logger = LogManager.getLogger(this); add(a: number, b: number) { - this.logger.info('calculating {} + {}', a, b); + this.logger.info('calculating %d + %d', a, b); return a + b; } } diff --git a/library/README_en.md b/library/README_en.md index 4247f93..f9a73bc 100644 --- a/library/README_en.md +++ b/library/README_en.md @@ -41,7 +41,7 @@ class LogTestClass { private logger: Logger = LogManager.getLogger(this); add(a: number, b: number) { - this.logger.info('calculating {} + {}', a, b); + this.logger.info('calculating %d + %d', a, b); return a + b; } } diff --git a/library/example/Index.ets b/library/example/Index.ets index 85dba66..bd6a395 100644 --- a/library/example/Index.ets +++ b/library/example/Index.ets @@ -8,9 +8,9 @@ import { MarkedTracedStr, LogView, LogViewMode, - LogViewColorConfig + LogViewColorConfig, + Level } from '@log/log4a'; -import { Level } from '@log/log4a/src/main/ets/Level'; import { fileAppender_a, socketAppender } from './socketAppenderConstants'; class TestClass { @@ -23,7 +23,7 @@ class TestClass { @TraceEntry enter(...args: number[]) { - this.logger.withMarker(MarkerManager.getMarker('IMPORTANT')).info("args are {}", args); + this.logger.withMarker(MarkerManager.getMarker('IMPORTANT')).info("args are %j", args); this.logger.info("without marker") return args; } @@ -50,7 +50,7 @@ export struct Index { intercepted: boolean = false; aboutToAppear(): void { - this.logger.info('Hello {}!', 'world'); + this.logger.info('Hello %s!', 'world'); } build() { @@ -71,7 +71,7 @@ export struct Index { }) Button('log') .onClick(() => { - this.logger.error('log into file and console, {}', Level.ALL); + this.logger.error('log into file and console, %j', Level.ALL); // this.test.logger.info('test logger into file and console, {}', Level.ALL); }) diff --git a/library/src/main/ets/Decorators.ts b/library/src/main/ets/Decorators.ts index 23ba073..ebdbc19 100644 --- a/library/src/main/ets/Decorators.ts +++ b/library/src/main/ets/Decorators.ts @@ -21,18 +21,18 @@ export const TraceEntry = (target: any, methodName: string, propertyDescriptor: const method = propertyDescriptor.value; const logger = LogManager.getLogger(target); if (method === undefined) { - logger.error("Cannot access to method: [{}], log failed.", methodName); + logger.error("Cannot access to method: [%s], log failed.", methodName); } else { propertyDescriptor.value = function (...args: any[]) { if (args.length == 0) { - logger.trace("Method: [{}] called with no arguments", methodName); + logger.trace("Method: [%s] called with no arguments", methodName); } else { - logger.trace("Method: [{}] called with arguments {}", methodName, args); + logger.trace("Method: [%s] called with arguments %j", methodName, args); } try { return method.apply(this, args); } catch (e) { - logger.error("Method execute failed with error: {}", e); + logger.error("Method execute failed with error: %j", e); throw e; } } @@ -43,15 +43,16 @@ export const TraceExit = (target: any, methodName: string, propertyDescriptor: P const method = propertyDescriptor.value; const logger = LogManager.getLogger(target); if (method === undefined) { - logger.error("Cannot access to method [{}], log failed.", methodName); + logger.error("Cannot access to method [%s], log failed.", methodName); } else { propertyDescriptor.value = function (...args: any[]) { try { const result = method.apply(this, args); - logger.trace("Method [{}] exited with result: {}", methodName, result); + let type = typeof result === 'object' ? '%j' : '%s' + logger.trace("Method [%s] exited with result: " + type, methodName, type == '%j' ? result : result + ''); return result; } catch (e) { - logger.error("Method [{}] exited with error: {}", methodName, e); + logger.error("Method [%s] exited with error: %j", methodName, e); throw e; } } @@ -62,7 +63,7 @@ export const TraceTime = (target: any, methodName: string, propertyDescriptor: P const logger = LogManager.getLogger(target); const method = propertyDescriptor.value; if (method === undefined) { - logger.error("Cannot access to method [{}], timer terminated.", methodName); + logger.error("Cannot access to method [%s], timer terminated.", methodName); return; } propertyDescriptor.value = function (...args: any[]) { @@ -72,7 +73,7 @@ export const TraceTime = (target: any, methodName: string, propertyDescriptor: P console.timeEnd('log4a timer for ' + methodName); return result; } catch (e) { - logger.error("Method [{}] exited with error: {}, timer terminated.", methodName, e); + logger.error("Method [%s] exited with error: %j, timer terminated.", methodName, e); throw e; } } @@ -80,14 +81,14 @@ export const TraceTime = (target: any, methodName: string, propertyDescriptor: P export const TracedStr = (strings: TemplateStringsArray, ...args: any[]) => { const logger = LogManager.anonymous(); - logger.withMarker(MarkerManager.getMarker("Anonymous")).info("built with format: {} and args: {}", strings, args); + logger.withMarker(MarkerManager.getMarker("Anonymous")).info("built with format: %j and args: %j", strings, args); return strings[0] + args.map((e, i) => `${e}${strings[i+1]}`).join(''); } export const MarkedTracedStr = (marker: string = "Anonymous") => { const logger = LogManager.anonymous(); return (strings: TemplateStringsArray, ...args: any[]) => { - logger.withMarker(MarkerManager.getMarker(marker)).info("built with format: {} and args: {}", strings, args); + logger.withMarker(MarkerManager.getMarker(marker)).info("built with format: %j and args: %j", strings, args); return strings[0] + args.map((e, i) => `${e}${strings[i+1]}`).join(''); } } \ No newline at end of file diff --git a/library/src/main/ets/FileManager.ts b/library/src/main/ets/FileManager.ts index 0a49950..1d7e02a 100644 --- a/library/src/main/ets/FileManager.ts +++ b/library/src/main/ets/FileManager.ts @@ -99,7 +99,7 @@ class FileManagerClass { this._fileMap.set(path, new ManagedFile(f, this.getCachedFiles(path))); return this._fileMap.get(path); } catch (err) { - console.error('Failed to get managed file, error: {}', err); + console.error('Failed to get managed file, error: $j', err); } } diff --git a/library/src/main/ets/abstract/AbstractLogger.ts b/library/src/main/ets/abstract/AbstractLogger.ts index e0f9f43..8571f56 100644 --- a/library/src/main/ets/abstract/AbstractLogger.ts +++ b/library/src/main/ets/abstract/AbstractLogger.ts @@ -369,25 +369,8 @@ export abstract class AbstractLogger { } makeMessage(_: Level, format: string, messages: Object[]): string { - const msgArr = messages.map(v => { - if (typeof v == 'object') { - try { - const parsed = '\n' + JSON.stringify(v, null, 2).replace(/\n/g, "\n") + '\n'; - return parsed; - } catch { - return v.constructor.name; - } - } - return v; - }); - while (format.lastIndexOf('{}') != -1) { - format = format.replace('{}', msgArr.shift()); - } - if (msgArr.length > 0) { - this.fatal('Argument count is more than "{}" in message format, you may not getting what you want to log.') - } this.count++; - return format; + return util.format(format,...messages); } protected time() { diff --git a/library/src/main/ets/appender/DatabaseAppender.ts b/library/src/main/ets/appender/DatabaseAppender.ts index 1edaa19..eda15d3 100644 --- a/library/src/main/ets/appender/DatabaseAppender.ts +++ b/library/src/main/ets/appender/DatabaseAppender.ts @@ -117,7 +117,7 @@ export class DatabaseAppender extends AbstractAppender { this._dbStatus = DatabaseFetchingStatus.DONE; this._handleTemp(); } catch (err) { - this._logger.error('Cannot get database to append from config: {}. Error: {}', this._options.storeConfig, err); + this._logger.error('Cannot get database to append from config: %j. Error: %j', this._options.storeConfig, err); this._dbStatus = DatabaseFetchingStatus.INVALID; } } diff --git a/library/src/main/ets/appender/SMTPAppender.ts b/library/src/main/ets/appender/SMTPAppender.ts index 029fb6e..8aa65f8 100644 --- a/library/src/main/ets/appender/SMTPAppender.ts +++ b/library/src/main/ets/appender/SMTPAppender.ts @@ -146,12 +146,12 @@ export class SMTPAppender extends CSocketAppender { this.tmpLogArray = []; this.transport.close(() => undefined); } else if (this.config.debug) { - this.logger.error('Cannot send mail due to {}', err) + this.logger.error('Cannot send mail due to %j', err) } }); } else if (err) { if (this.config.debug) { - this.logger.error('Cannot connect to server with given properties: {}, error: {}', properties, err); + this.logger.error('Cannot connect to server with given properties: %j, error: %j', properties, err); } } }) diff --git a/library/src/main/ets/appender/TCPSocketAppender.ts b/library/src/main/ets/appender/TCPSocketAppender.ts index bfc93ef..0693b0d 100644 --- a/library/src/main/ets/appender/TCPSocketAppender.ts +++ b/library/src/main/ets/appender/TCPSocketAppender.ts @@ -50,10 +50,10 @@ export class TCPSocketAppender extends CSocketAppender { this.logger.info('TCPSocketAppender connected.'); this.handleMessageQueue(); }).catch((err) => { - this.logger.error('error connecting to remote address: {}', err); + this.logger.error('error connecting to remote address: %j', err); }); }).catch((err) => { - this.logger.error('error binding socket: {}', err); + this.logger.error('error binding socket: %j', err); }) } @@ -90,7 +90,7 @@ export class TCPSocketAppender extends CSocketAppender { }).then(() => { this.logger.info('Message sent to server.') }).catch((err) => { - this.logger.trace('Failed to send message to server via tcp: {}', err); + this.logger.trace('Failed to send message to server via tcp: %j', err); }); } diff --git a/library/src/main/ets/appender/UDPSocketAppender.ts b/library/src/main/ets/appender/UDPSocketAppender.ts index e29efc9..89672fc 100644 --- a/library/src/main/ets/appender/UDPSocketAppender.ts +++ b/library/src/main/ets/appender/UDPSocketAppender.ts @@ -76,7 +76,7 @@ export class UDPSocketAppender extends CSocketAppender { }).then(() => { this.logger.info('Message sent to server.') }).catch((err) => { - this.logger.trace('Failed to send message to server via tcp: {}', err); + this.logger.trace('Failed to send message to server via tcp: %j', err); }); } diff --git a/library/src/main/ets/benchmark/BenchmarkBase.ts b/library/src/main/ets/benchmark/BenchmarkBase.ts index af31864..1d5f3d4 100644 --- a/library/src/main/ets/benchmark/BenchmarkBase.ts +++ b/library/src/main/ets/benchmark/BenchmarkBase.ts @@ -39,7 +39,7 @@ export abstract class BenchmarkBase { let end = this.data.length; console.time(this.constructor.name); for (i; i < end; i++) { - logger.info('{}', this.data[i]); + logger.info('%s', this.data[i]); } console.timeEnd(this.constructor.name); } diff --git a/library/src/test/LocalUnit.test.ets b/library/src/test/LocalUnit.test.ets index 6708079..b9a3147 100644 --- a/library/src/test/LocalUnit.test.ets +++ b/library/src/test/LocalUnit.test.ets @@ -33,7 +33,7 @@ export default function localUnitTest() { it('assertContain', 0, () => { // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. const logger = LogManager.getLogger('UnitTest'); - logger.info('UnitTest {}', 'begins'); + logger.info('UnitTest %s', 'begins'); const appender = new ConsoleAppender(); const tC = new TemporaryLoggerContext(); // Defines a variety of assertion methods, which are used to declare expected boolean conditions. -- Gitee