Skip to content

Commit

Permalink
Merge branch 'release/v0.19.2'
Browse files Browse the repository at this point in the history
  • Loading branch information
holtwick committed Apr 4, 2024
2 parents 59a341e + e9ffab2 commit 8c8e789
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 6 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "zeed",
"type": "module",
"version": "0.19.1",
"version": "0.19.2",
"description": "🌱 Simple foundation library",
"author": {
"name": "Dirk Holtwick",
Expand Down
7 changes: 7 additions & 0 deletions src/common/log/log-base.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
34 changes: 29 additions & 5 deletions src/common/log/log-memory.ts
Original file line number Diff line number Diff line change
@@ -1,22 +1,46 @@
import { objectPlain } from '../data'
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[]
errorTrace?: boolean
limit?: number
maxDepth?: number
},
): LogHandler {
const { level = undefined, filter = undefined, 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()
messages.push(msg)

msg.timestamp ??= getTimestamp()

const m = objectPlain(msg, { maxDepth, errorTrace })
if (compact === true)
(messages as LogMessageCompact[]).push([m.timestamp, m.level, m.name, ...m.messages])
else
(messages as LogMessage[]).push(m)

if (counter <= 0)
messages.shift()
else
--counter
}
}

0 comments on commit 8c8e789

Please sign in to comment.