3 Commits

Author SHA1 Message Date
jdb f405c0bc5a bump version for v2.4.0. 2026-05-05 08:54:00 -05:00
jdb f9cb676b46 Properly set default thresholds on log appenders. 2026-05-05 07:50:47 -05:00
jdb 4dcc4fad25 Add BufferLogAppender
Sometimes it is useful to capture log messages in a way that is easy for
the running program to introspect or manually handle.
*BufferLogAppender* captures the logs in a simple array.

Be careful, there is no default flush/clear mechanism that runs
automatically. Users of BufferLogAppender should take care to
render/handle log messages and periodically call `clearBuffer` on the
*BufferLogAppender* instance to avoid the buffer array growing without
limit.
2026-05-05 06:25:09 -05:00
5 changed files with 29 additions and 14 deletions
BIN
View File
Binary file not shown.
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@jdbernard/logging", "name": "@jdbernard/logging",
"version": "2.3.3", "version": "2.4.0",
"description": "Simple Javascript logging service.", "description": "Simple Javascript logging service.",
"main": "dist/index.js", "main": "dist/index.js",
"types": "dist/index.d.ts", "types": "dist/index.d.ts",
+2 -4
View File
@@ -5,7 +5,7 @@ export class ApiLogAppender implements LogAppender {
public batchSize = 10 public batchSize = 10
public minimumTimePassedInSec = 60 public minimumTimePassedInSec = 60
public maximumTimePassedInSec = 120 public maximumTimePassedInSec = 120
public threshold = LogLevel.ALL public threshold: LogLevel
private msgBuffer: FlattenedLogMessage[] = [] private msgBuffer: FlattenedLogMessage[] = []
private lastSent = 0 private lastSent = 0
@@ -16,9 +16,7 @@ export class ApiLogAppender implements LogAppender {
threshold?: LogLevel threshold?: LogLevel
) { ) {
setTimeout(this.checkPost, 1000) setTimeout(this.checkPost, 1000)
if (threshold) { this.threshold = threshold ?? LogLevel.ALL
this.threshold = threshold
}
} }
public appendMessage(msg: LogMessage): void { public appendMessage(msg: LogMessage): void {
+21
View File
@@ -0,0 +1,21 @@
import type { LogAppender } from './log-appender'
import { LogLevel, type LogMessage } from './log-message'
export class BufferLogAppender implements LogAppender {
public threshold: LogLevel
public buffer: LogMessage[]
constructor(buffer?: LogMessage[], threshold?: LogLevel) {
this.buffer = buffer ?? []
this.threshold = threshold ?? LogLevel.ALL
}
public appendMessage(msg: LogMessage): void {
if (this.threshold && msg.level < this.threshold) return
else this.buffer.push(msg)
}
public clearBuffer(): void {
this.buffer.length = 0
}
}
+4 -8
View File
@@ -18,16 +18,12 @@ import { LogAppender } from './log-appender'
* data for inspection in the browser's developer tools. * data for inspection in the browser's developer tools.
*/ */
export class ConsoleLogAppender implements LogAppender { export class ConsoleLogAppender implements LogAppender {
public threshold = LogLevel.ALL public threshold: LogLevel
public formatter: LogMessageFormatter = flattenMessage public formatter: LogMessageFormatter
constructor(threshold?: LogLevel, formatter?: LogMessageFormatter) { constructor(threshold?: LogLevel, formatter?: LogMessageFormatter) {
if (threshold) { this.threshold = threshold ?? LogLevel.ALL
this.threshold = threshold this.formatter = formatter ?? flattenMessage
}
if (formatter) {
this.formatter = formatter
}
} }
public appendMessage(msg: LogMessage): void { public appendMessage(msg: LogMessage): void {