From f4af8230443f74d6643a1cb495324c204292b3da Mon Sep 17 00:00:00 2001 From: Dirk Holtwick Date: Thu, 4 Apr 2024 23:39:37 +0200 Subject: [PATCH 1/3] feat: LogMessageCompact --- src/common/log/log-base.ts | 7 +++++++ src/common/log/log-memory.ts | 19 ++++++++++++++----- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/common/log/log-base.ts b/src/common/log/log-base.ts index aa7a882..5979913 100644 --- a/src/common/log/log-base.ts +++ b/src/common/log/log-base.ts @@ -41,6 +41,13 @@ export interface LogMessage { timestamp?: number } +export type LogMessageCompact = [ + timestamp: number, + level: LogLevel, + name: string, + ...messages: any[], +] + export type LogHandler = (msg: LogMessage) => void export interface LoggerInterface { diff --git a/src/common/log/log-memory.ts b/src/common/log/log-memory.ts index 004cae5..a82c16d 100644 --- a/src/common/log/log-memory.ts +++ b/src/common/log/log-memory.ts @@ -1,14 +1,20 @@ import { getTimestamp } from '../time' -import type { LogHandler, LogHandlerOptions, LogMessage } from './log-base' +import type { LogHandler, LogHandlerOptions, LogMessage, LogMessageCompact } from './log-base' import { useLevelFilter, useNamespaceFilter } from './log-filter' +export function logMessageFromCompact(m: LogMessageCompact): LogMessage { + const [timestamp, level, name, ...messages] = m + return { timestamp, level, name, messages } +} + /** Collect messages in a list. */ export function LoggerMemoryHandler( opt: LogHandlerOptions & { - messages: LogMessage[] + compact?: boolean + messages: LogMessageCompact[] | LogMessage[] }, ): LogHandler { - const { level = undefined, filter = undefined, messages = [] } = opt + const { level = undefined, filter = undefined, compact = false, messages = [] } = opt const matchesNamespace = useNamespaceFilter(filter) const matchesLevel = useLevelFilter(level) return (msg: LogMessage) => { @@ -16,7 +22,10 @@ export function LoggerMemoryHandler( return if (!matchesNamespace(msg.name)) return - msg.timestamp = getTimestamp() - messages.push(msg) + msg.timestamp ??= getTimestamp() + if (compact === true) + (messages as LogMessageCompact[]).push([msg.timestamp, msg.level, msg.name, ...msg.messages]) + else + (messages as LogMessage[]).push(msg) } } From 767bb95405417943cd483f0c53ca20fb952d7300 Mon Sep 17 00:00:00 2001 From: Dirk Holtwick Date: Thu, 4 Apr 2024 23:51:52 +0200 Subject: [PATCH 2/3] fix: LogMemeory more robust --- src/common/log/log-memory.ts | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/common/log/log-memory.ts b/src/common/log/log-memory.ts index a82c16d..b1a3742 100644 --- a/src/common/log/log-memory.ts +++ b/src/common/log/log-memory.ts @@ -1,3 +1,4 @@ +import { objectPlain } from '../data' import { getTimestamp } from '../time' import type { LogHandler, LogHandlerOptions, LogMessage, LogMessageCompact } from './log-base' import { useLevelFilter, useNamespaceFilter } from './log-filter' @@ -12,20 +13,34 @@ export function LoggerMemoryHandler( opt: LogHandlerOptions & { compact?: boolean messages: LogMessageCompact[] | LogMessage[] + errorTrace?: boolean + limit?: number + maxDepth?: number }, ): LogHandler { - const { level = undefined, filter = undefined, compact = false, messages = [] } = opt + const { level = undefined, filter = undefined, compact = false, messages = [], errorTrace = false, maxDepth = 20 } = opt const matchesNamespace = useNamespaceFilter(filter) const matchesLevel = useLevelFilter(level) + + let counter = opt.limit ?? Number.POSITIVE_INFINITY + return (msg: LogMessage) => { if (!matchesLevel(msg.level)) return if (!matchesNamespace(msg.name)) return + msg.timestamp ??= getTimestamp() + + const m = objectPlain(msg, { maxDepth, errorTrace }) if (compact === true) - (messages as LogMessageCompact[]).push([msg.timestamp, msg.level, msg.name, ...msg.messages]) + (messages as LogMessageCompact[]).push([m.timestamp, m.level, m.name, ...m.messages]) + else + (messages as LogMessage[]).push(m) + + if (counter <= 0) + messages.shift() else - (messages as LogMessage[]).push(msg) + --counter } } From e9ffab28f79b33c3b65515dd86f93f0141ed0afd Mon Sep 17 00:00:00 2001 From: Dirk Holtwick Date: Thu, 4 Apr 2024 23:52:18 +0200 Subject: [PATCH 3/3] 0.19.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 57ee33f..c543ce3 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "zeed", "type": "module", - "version": "0.19.1", + "version": "0.19.2", "description": "🌱 Simple foundation library", "author": { "name": "Dirk Holtwick",