Add callback output

This commit is contained in:
Clayton Wilson 2024-03-12 03:14:45 -05:00
parent abb548f5ec
commit e094dd16a3
3 changed files with 40 additions and 7 deletions

20
src/outputs/Callback.ts Normal file
View File

@ -0,0 +1,20 @@
import { LogContext, LogMeta } from "../types/logger";
import { Loggable } from "../interface/output";
import { CallbackOutputConfig } from "../types/output";
export default class Callback implements Loggable {
private callback:
| ((message: string, meta: LogMeta, context: LogContext) => void)
| ((message: string, meta: LogMeta, context: LogContext) => Promise<void>)
| undefined;
enabled: boolean;
constructor(config: CallbackOutputConfig) {
this.enabled = config.enabled;
this.callback = config.callback;
}
write(message: string, meta: LogMeta, context: LogContext): void {
if (this.callback) {
this.callback(message, meta, context);
}
}
}

View File

@ -1,3 +1,5 @@
import { z } from "zod";
export enum LogLevel {
TRACE = 10,
DEBUG = 20,
@ -14,14 +16,16 @@ export enum LogLabel {
FATAL = "fatal",
}
export interface LogContext {
[key: string]: any;
}
export const LogContext = z.record(z.any());
export interface LogMeta {
level: LogLevel;
time: Date;
}
export type LogContext = z.infer<typeof LogContext>;
export const LogMeta = z.object({
level: z.nativeEnum(LogLevel),
time: z.date(),
});
export type LogMeta = z.infer<typeof LogMeta>;
export interface LogData {
message: string;

View File

@ -1,3 +1,4 @@
import { LogContext, LogMeta } from "logger";
import { z } from "zod";
export const ConsoleStyles = z
@ -123,3 +124,11 @@ export interface TampermonkeyBucketInfo {
size: number;
createdAt: number;
}
export interface CallbackOutputConfig {
enabled: boolean;
callback:
| ((message: string, meta: LogMeta, context: LogContext) => void)
| ((message: string, meta: LogMeta, context: LogContext) => Promise<void>)
| undefined;
}