signal-desktop/ts/sql/sqlLogger.ts

58 lines
1.6 KiB
TypeScript
Raw Normal View History

2025-05-22 21:09:54 -04:00
// Copyright 2025 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
2025-06-16 09:47:18 -07:00
import { parentPort } from 'node:worker_threads';
import { format } from 'node:util';
2025-05-22 21:09:54 -04:00
import type { LoggerType } from '../types/Logging';
import type { WrappedWorkerLogEntry, WrappedWorkerResponse } from './main';
import { consoleLogger } from '../util/consoleLogger';
import { strictAssert } from '../util/assert';
2025-08-06 10:32:08 -07:00
class SQLLogger {
#msgPrefix: string;
constructor(msgPrefix: string) {
this.#msgPrefix = msgPrefix;
}
2025-05-22 21:09:54 -04:00
fatal(...args: Array<unknown>) {
2025-08-06 10:32:08 -07:00
this.#log('fatal', args);
}
2025-05-22 21:09:54 -04:00
error(...args: Array<unknown>) {
2025-08-06 10:32:08 -07:00
this.#log('error', args);
}
2025-05-22 21:09:54 -04:00
warn(...args: Array<unknown>) {
2025-08-06 10:32:08 -07:00
this.#log('warn', args);
}
2025-05-22 21:09:54 -04:00
info(...args: Array<unknown>) {
2025-08-06 10:32:08 -07:00
this.#log('info', args);
}
2025-05-22 21:09:54 -04:00
debug(...args: Array<unknown>) {
2025-08-06 10:32:08 -07:00
this.#log('debug', args);
}
2025-05-22 21:09:54 -04:00
trace(...args: Array<unknown>) {
2025-08-06 10:32:08 -07:00
this.#log('trace', args);
}
child(subsystem: string) {
return new SQLLogger(`${this.#msgPrefix}[${subsystem}] `);
}
#log(level: WrappedWorkerLogEntry['level'], args: Array<unknown>): void {
if (parentPort) {
const [fmt, ...rest] = args;
const wrappedResponse: WrappedWorkerResponse = {
type: 'log',
level,
args: ([this.#msgPrefix + fmt] as Array<unknown>).concat(rest),
};
parentPort.postMessage(wrappedResponse);
} else {
strictAssert(process.env.NODE_ENV === 'test', 'must be test environment');
consoleLogger[level](this.#msgPrefix + format(...args));
}
}
}
export const sqlLogger: LoggerType = new SQLLogger('');